【发布时间】:2012-10-20 06:59:12
【问题描述】:
我在<ui:repeat> 中有一个<p:selectManyCheckbox>,从某个对象类的列表中获取它的项目(由<ui:repeat>-variable 提供),并且应该将所选项目保存到同一对象类的另一个列表中.但它只为最后一个条目(<ui:repeat> 的最后一次迭代)调用 setter 方法 #{cartBean.setSelectedExtras}。
<ui:repeat var="item" value="#{category.items}">
<p:selectManyCheckbox id="extraCheckbox" value="#{cartBean.selectedExtras}" layout="pageDirection" converter="omnifaces.SelectItemsConverter">
<f:selectItems value="#{item.items5}" var="extra" itemLabel="#{extra.name}"/>
</p:selectManyCheckbox>
</ui:repeat>
更新:
我按照 BalusC 提议的方式更改了上述构造。
支持 bean 中的声明现在是:
private List<List<Item>> selectedExtras = new ArrayList<List<Item>>();
当我选中由<ui:repeat> 的第一个循环创建的复选框并单击同一<h:form> 内的<p:commandButton> 时,不会调用selectedExtras 的setter 方法。当我检查在<ui:repeat> 的最后一个循环中创建的复选框并单击<p:commandButton> 时,我得到一个异常:
javax.el.PropertyNotFoundException: /lightbox-item.xhtml @57,165 value="#{cartBean.selectedExtras[iteration.index]}": null
【问题讨论】:
-
您将需要发布更多代码。请发布一些支持 bean 代码。
-
@Catfish 我编辑了我的问题。实际上,我认为没有任何有趣的支持 bean 代码。正如您现在所看到的,
#{item}是来自<ui:repeat>的变量,#{cartBean.selectedExtras}指向List<Item>的简单setter/getter 方法,就像#{item.items5}是1,#{category.items}也是一样。
标签: jsf-2 checkbox primefaces omnifaces selectmanycheckbox