我有一棵丰富的树,它包含很少的节点。我在每个节点旁边都有一个复选框。当我选中一个复选框时,需要检查所有孩子的复选框,当我取消选中时,必须取消选中所有孩子。我的xhtml中有以下代码。在支持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>
答案 0 :(得分:3)
尝试将h:selectBooleanCheckBox
包裹在a4j:outputPanel
标记内,然后定义ID名称,然后在a4j:outputPanel
标记上重新a4j:support
。如果仍然没有重新恢复,请尝试将ajaxRendered="true"
放在a4j:outputPanel
上,这将使其始终针对每个ajax请求进行更新。
试试这个。
<rich:tree id="producttree" switchType="server"
value="#updateProductBean.deviceServiceTreeRoot}" var="item">
<rich:treeNode id="productnode">
<a4j:outputPanel id="panel" ajaxRendered="true">
<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, panel">
</a4j:support>
</h:selectBooleanCheckbox>
</a4j:outputPanel>
<h:outputText value="#{item.name}"
rendered="#{item.value == null}" />
</rich:treeNode>
</rich:tree>
答案 1 :(得分:-1)
它渲染你在树上单击的整个级别,所以如果你有任何ajax调用那么它将调用第一个节点并将跳过休息。整个故事都是整个层面的映射。