【发布时间】:2012-07-03 16:35:49
【问题描述】:
我有一棵丰富的树,它包含的节点很少。我在每个节点旁边都有一个复选框。当我选中一个复选框时,需要选中与所有子项相关的复选框,而当我取消选中所有子项时,必须取消选中。我的 xhtml 中有以下代码。在 backing bean 中,我根据事件将所有子项设置为选中/未选中。树最初处于“折叠”模式。当我单击复选框并展开节点时,我可以看到所有子项都被选中。但是当我在扩展模式中取消选中/检查时,这些值不会反映在子元素中。你能帮我知道我错过了什么吗?谢谢。
<rich:tree id="producttree" switchType="server"
value="#updateProductBean.deviceServiceTreeRoot}" var="item">
<rich:treeNode id="productnode">
<h:selectBooleanCheckbox value="#{item.selected}"
rendered="#{item.value == null && item.checkbox == true}"
valueChangeListener="#{updateProductBean.submitUpdateProduct}">
<f:attribute name="selectedProductId" id="selectedProductId"
value="#{item.paramID}" />
<f:attribute name="selectedProductName" id="selectedProductName"
value="#{item.name}" />
<a4j:support event="onclick" reRender="producttree,productnode">
</a4j:support>
</h:selectBooleanCheckbox>
<h:outputText value="#{item.name}" rendered="#{item.value == null}" />
</rich:treeNode>
</rich:tree>
【问题讨论】:
-
我猜它的重新渲染问题。你确定选中复选框后树会重建吗?
-
感谢您的回复 Ellie - 我不确定这棵树是否正在完全重建。我添加了与复选框“选定”属性有关的布尔变量作为输出文本。对于我正在检查的复选框,此值正在更改 - 但不确定是否重新渲染了 chold 元素。