【问题标题】:Is this a bug in primefaces autocomplete?这是 primefaces 自动完成中的错误吗?
【发布时间】:2014-03-19 19:17:26
【问题描述】:

我正在尝试设置一个自动完成功能,以获取建议作为Entry<String, Integer> 的列表

<p:autoComplete completeMethod="#{suggester.suggestTopics}"
            var="x1" itemLabel="#{x1.key}" itemValue="#{x1.value.toString()}" 
            value="#{topicController.selected}"   />

Manged bean 代码如下:

private int selected;

public int getSelected() {
    return selected;
}

public void setSelected(int selected) {
    this.selected= selected;
}

但是,如果说 Integer 类没有名为 key 的方法/属性,这将失败。如果我从自动完成中删除 value 属性,那么它就会开始正常工作。但是当我输入值属性时,它开始期望var 中的对象应该与value 属性中的对象类型相同。我相信/期望应该是itemValue 中的对象应该与value 属性中的对象类型相同。

我想使用 POJO 提供建议,但只将实体 ID 传递给值


使用: Primefaces 3.1 JSF 2.1.6

【问题讨论】:

    标签: jsf primefaces


    【解决方案1】:

    我相信/期望它应该是 itemValue 内的对象应该 与内部值属性的类型相同。

    是的,这是有道理的,在primefaces showcase中也是如此:

    <p:autoComplete value="#{autoCompleteBean.selectedPlayer1}" 
                    id="basicPojo" 
                    completeMethod="#{autoCompleteBean.completePlayer}"  
                    var="p" itemLabel="#{p.name}" itemValue="#{p}" 
                    converter="player" forceSelection="true"/>  
    

    如您所见,var="p"itemValue="#{p} 其中 p 是 Player 的一个实例。而selectedPlayer1 也是Player 的一个实例。

    我不知道它是否适用于 Map,因为 Primefaces 示例称为“Pojo 支持”,并且建议应该是与 value 属性中相同类型的元素的 List

    【讨论】:

    • 感谢马特,但是当我需要将所选玩家的 ID 传递给 DB 时,我不太喜欢这种方法,这需要我再次从 DB 中获取数据,重建玩家对象并使用转换器可以通过传递 playerId 来完成...
    • 我想使用 POJO 提供建议,但只将实体 ID 传递给值
    【解决方案2】:

    我认为您想使用 Simple auto complete ,但您在 Pojo Support 的展示中查看了错误的示例

    x1 指的是选定的 int - 虽然它希望被引用为 POJO(具有键和值属性。),这就是您收到消息的原因

    整数类没有名为键的方法/属性

    或者简单地使用Simple auto complete

    【讨论】:

    • 我想使用 POJO 提供建议,但只将实体 ID 传递给值
    • 为什么不传递对象并利用它的 id 属性?
    • 我不太喜欢这种方法,因为这需要我再次从数据库中获取数据,重建对象并使用转换器,否则只能通过传递 entityId 来避免。
    【解决方案3】:

    正如对 Matt 所说,您不需要从 Db 重建 Player(Pojo)。您可以简单地设置 Player(Pojo) 的 id 属性,并且在操作方法中可以利用此 id 从 DB 中获取它。

    在你的转换器中你可能会这样做

    Entry<String, Integer> e = new Entry<String, Integer>();
    e.setId(value)  // where value is passed in to convertor in method getAsObject.....
    

    此值将设置为private Entry&lt;String, Integer&gt; selected

    我使用过 Pojo 自动完成功能,但没有尝试过泛型类。

    希望这会有所帮助。

    【讨论】:

      【解决方案4】:

      我知道这个问题已经过时了,但我也遇到了同样的问题。 关键是您必须将 var 分配给 p (var="p")。我认为这非常不明显(文档没有提到它必须是那样),因为我认为我可以分配我想要的任何 var 名称。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-11
        • 1970-01-01
        • 2013-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-13
        • 1970-01-01
        相关资源
        最近更新 更多