在递归forEach上绑定只能单向工作,不存储更改

时间:2016-05-02 15:34:47

标签: jsf recursion el

我使用我创建的以下两个JSF复合组件递归渲染节点树:

tree.xhtml:

...

<cc:implementation>

  <h:panelGroup id="content" layout="block">
        <ul>
            <c:forEach items="#{cc.attrs.rootNode.children}" var="node">
                <ui:include src="treeNode.xhtml">
                   <ui:param name="level" value="1" />
                </ui:include>
            </c:forEach>
        </ul>
    </h:panelGroup>

</cc:implementation>

treeNode.xhtml:

...

<cc:implementation>

    <li>
        #{node.label}
        <h:selectBooleanCheckbox value="#{node.checked}" />
        <c:if test="#{not empty node.children}">
            <ul class="node-level-#{level}">
                <c:forEach items="#{node.children}" var="node">
                    <ui:include src="treeNode.xhtml">
                       <ui:param name="level" value="#{level + 1}" />
                    </ui:include>
                </c:forEach>
            </ul>
        </c:if>
    </li>

</cc:implementation>

每个节点都有属性label, checked,children(后者是节点列表)。

我很好地渲染了它,但当我尝试更改值时,通过选中复选框并提交表单,它不会被存储。下次刷新页面时,我仍然会获得初始状态(所有复选框都未选中)。

我做错了什么?

0 个答案:

没有答案