特定のオブジェクト クラス (-variable によって提供される) のリストからアイテムを取得し<p:selectManyCheckbox>
、選択したアイテムを同じオブジェクト クラスの別のリストに保存することになっています。ただし、最後のエントリ (の最後の繰り返し) に対してのみセッター メソッドを呼び出します。<ui:repeat>
<ui:repeat>
#{cartBean.setSelectedExtras}
<ui:repeat>
<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>
をクリックすると、のセッターメソッドは呼び出されません。の最後のループで作成されたチェックボックスをオンにしてクリックすると、例外が発生します。 <p:commandButton>
<h:form>
selectedExtras
<ui:repeat>
<p:commandButton>
javax.el.PropertyNotFoundException: /lightbox-item.xhtml @57,165 value="#{cartBean.selectedExtras[iteration.index]}": null