0

我有一棵丰富的树,它包含很少的节点。我在每个节点旁边都有一个复选框。当我选中一个复选框时,需要选中与所有孩子相关的复选框,当我取消选中所有孩子时,必须取消选中。我的 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 &amp;&amp; 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>
4

2 回答 2

3

尝试将您h:selectBooleanCheckBox的标签包装在a4j:outputPanel标签中,然后定义一个 id 名称,然后a4j:outputPanel在您的a4j:support标签上重新渲染它。如果它仍然没有重新渲染,试着穿上ajaxRendered="true"你的a4j:outputPanelthis 将使它总是为每个 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 &amp;&amp; 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>
于 2012-07-11T02:18:22.000 回答
-1

它呈现您单击树的整个一个级别,因此如果您有任何 ajax 调用,那么它将调用第一个节点并跳过休息。整个故事正在映射整个级别。

于 2013-11-22T04:11:33.560 回答