f:selectItems和POJO - 再一次

时间:2011-09-14 19:00:06

标签: jsf

所有问题:如何将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等?

1 个答案:

答案 0 :(得分:0)

可能您的MyItem类已经被toString()重写,返回txt并且您按照以下方式打印selected以确定所选值:

System.out.println(selected);

尝试将selected的每个项目投回MyItem

for (MyItem myItem : selected) {
    System.out.println(myItem);
}

你会看到它失败了ClassCastException,因为它实际上 一个String。所以是的,你还需要一个转换器。

另见: