这是primefaces自动完成中的错误吗?

时间:2012-03-14 09:51:50

标签: jsf primefaces

我正在尝试将自动填充功能提取为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属性,则它会开始正常工作。但是当我放置value属性时,它开始期望var中的对象应该与value属性内的对象类型相同。我相信/期望itemValue中的对象应该与value属性内的对象类型相同。

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


使用: Primefaces 3.1 JSF 2.1.6

4 个答案:

答案 0 :(得分: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支持”,建议应该是Listvalue属性中相同类型的元素

答案 1 :(得分:0)

我认为你想使用Simple auto complete,而是在Pojo Support

的展示中查看了错误的示例

x1指的是所选的int - 虽然它希望被引用到POJO(带有键和值属性),这就是你得到消息的原因

  

整数类没有名为key

的方法/属性

或者简单地使用Simple auto complete

答案 2 :(得分:0)

正如Matt所说,你不需要从Db重建玩家(Pojo)。你可以简单地设置Player(Pojo)的id属性,并且在action方法中可以利用这个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<String, Integer> selected

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

希望这有帮助。

答案 3 :(得分:0)

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