我正在尝试将自动填充功能提取为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
答案 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支持”,建议应该是List
与value
属性中相同类型的元素
答案 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名称。