【问题标题】:f:selectItems and POJOs - once moref:selectItems 和 POJO - 再一次
【发布时间】:2011-09-14 19:00:05
【问题描述】:

所有问题:如何将 POJO 绑定到 h:selectXX 和 f:selectItems 最终得到答案“使用转换器”。但是,似乎可以不用转换器 - 请参阅:

小脸:

<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 等一起使用?

【问题讨论】:

    标签: jsf


    【解决方案1】:

    您的MyItem 类可能已经覆盖了toString(),它返回txt,并且您正在普通打印selected,如下所示以确定所选值:

    System.out.println(selected);
    

    尝试将selected的每一项都转换回MyItem

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

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

    另见:

    【讨论】:

    • 该死,你是对的 :) 我实际上是在视图中使用 EL 打印(用 f:ajax 刷新),MyItem 的 toString 已被标准 Eclipse toString-generation 覆盖。当我尝试你提到的 foreach 时,它真的在抛出 ClassCastExceptions!问题是如何将 List 传递给 List 参数,但据我所知,这里是关于泛型的 - MyItem 类型参数会丢失,这就是 JSF 能够传递任何东西(即字符串)的原因。谢谢!
    • 这已在“另见”链接中得到解答。 JSF/EL 根本不知道List 的泛型类型,因为这是在运行时完全丢失的设计。所有 JSF/EL 都知道它是一个 List,由于没有转换器,它只是将未修改/未转换的 String 提交的值添加到 List
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-09
    • 2014-06-06
    • 2011-07-18
    • 2016-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多