我使用我创建的以下两个JSF复合组件递归渲染节点树:
...
<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>
...
<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
(后者是节点列表)。
我很好地渲染了它,但当我尝试更改值时,通过选中复选框并提交表单,它不会被存储。下次刷新页面时,我仍然会获得初始状态(所有复选框都未选中)。
我做错了什么?