JSF丰富的树+ AJAX

时间:2012-07-03 16:35:49

标签: jsf richfaces jsf-1.2

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

2 个答案:

答案 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 &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>

答案 1 :(得分:-1)

它渲染你在树上单击的整个级别,所以如果你有任何ajax调用那么它将调用第一个节点并将跳过休息。整个故事都是整个层面的映射。