当前位置: 首页 > 知识库问答 >
问题:

PrimeFaces p:自动完成对象列表,转换失败

乜嘉悦
2023-03-14

我在正确使用autoComplete时遇到了一些问题,我试图让用户基于对象的文本字段进行搜索。目前我有以下几点:

<p:autoComplete forceSelection="true" value="#{answer.destinationQuestion}"
                completeMethod="#{editorView.completeText}"
                var="destinationQuestion" itemLabel="#{destinationQuestion.questionText}"
                itemValue="#{destinationQuestion}"/>
public List<Question> completeText(String query) {
        List<Question> ret = new ArrayList<Question>();
        
        for(Section section : this.survey.getSections()) {
            for(Question question : section.getQuestion()) {
                if(question.getQuestionText() != null && question.getQuestionText().contains(query)) {
                    ret.add(question);
                }
            }
        }
        
        return ret;
    }

我对这段代码的期望是,自动完成将允许用户选择单个问题实例,但一旦从自动完成中选择一个值并触发更新事件,我就会收到以下异常:

java.lang.IllegalArgumentException: Cannot convert Question@228bb9f7 of type class java.lang.String to class Question

有人建议我使用转换器,但我不明白为什么选择的值被视为字符串而不是我的问题对象,因为itemValue被定义为问题对象

编辑:这是在PrimeFaces 6.2上

共有1个答案

阎嘉荣
2023-03-14

根据您的代码,我可以告诉您的是,您缺少一个自定义转换器类。您应该像使用转换器一样使用它=“#{questionConverter}”。

为了进一步参考,你可以看到这个

 类似资料:
  • 我有一个实例列表。 如何将他们转变成这样一个未来:

  • 问题内容: Json字符串: C#类: C#将json转换为电影的c#列表: 我的变量最终是一个计数为0的空列表。我是否缺少某些内容? 问题答案: 您的C#类映射与json结构不匹配。 解决方案:

  • 我正在迁移从冰脸selectInputText到Primeface自动完成组件。 我将Primefaces 5.3.5与JSF 2.2.8结合使用。我在Icefaces 1.2中看到的自动完成结果与我的旧版本相同,但我没有看到用户详细信息。我在每行的第一个单元格中只看到数字0。 我不确定我的转换器看起来像什么 公共类AppUserConzer实现转换器{ } 我的自动完成组件的结果 你能告诉我我做

  • 问题内容: 我想使用Java 8技巧在一行中执行以下操作。 给定此对象定义: 和a ,我想得到a ,它是第一个列表中所有s对象的列表- 顺序相同。 我可以使用Java中的循环来做到这一点,但我相信Java8中应该有一个单行lambda可以做到这一点。我无法在线找到解决方案。也许我没有使用正确的搜索词。 有人可以为这种转换建议一个lambda或另一种线吗? 问题答案: 这应该可以解决问题: 也就是说

  • 问题内容: 我有SourceObjects列表,我需要将其转换为ResultObjects列表。 我可以使用ResultObject的方法将一个对象获取到另一个对象: 我当然可以这样: 但对于能够展示如何使用 rxJava 进行相同操作的人,我将非常感激。 问题答案: 如果发出,则可以使用以下运算符: (将您的列表转换为可观察项) (将您的商品转换为其他商品) 运算符(将完成的Observable

  • 我可以在Java中使用循环来实现这一点,但我认为在Java8中应该有一个一行程序lambda来实现这一点。我无法在网上找到解决方案。也许我没有使用正确的搜索词。 有人能为这个转换提出一个lambda或另一个一行程序吗?