所有问题:如何将POJO绑定到h:selectXX with f:selectItems最后回答“使用转换器”。但是,似乎可以不使用转换器 - 请参阅:
的facelet:
<h:selectManyListbox value="#{pojoBean.selected}">
<f:selectItems value="#{pojoBean.allItems}" var="i" itemValue="#{i}" itemLabel="#{i.txt}" />
</h:selectManyListbox>
豆:
public class PojoBean {
List<MyItem> selected;
List<MyItem> allItems;
POJO:
public class MyItem {
private String txt;
...}
请注意,这似乎仅适用于h:selectManyListbox,当选择的值最终在列表中时,而不是在单个属性中。
问题 - 为什么它不适用于h:selectOneMenu等?
答案 0 :(得分:0)
可能您的MyItem
类已经被toString()
重写,返回txt
并且您按照以下方式打印selected
以确定所选值:
System.out.println(selected);
尝试将selected
的每个项目投回MyItem
:
for (MyItem myItem : selected) {
System.out.println(myItem);
}
你会看到它失败了ClassCastException
,因为它实际上 一个String
。所以是的,你还需要一个转换器。