JSF富树&x2B;AJAX

JSF富树&x2B;AJAX,jsf,richfaces,jsf-1.2,Jsf,Richfaces,Jsf 1.2,我有一个丰富的树,它包含很少的节点。我在每个节点旁边都有一个复选框。当我选中复选框时,需要选中与所有子项相关的复选框,当我取消选中时,必须取消选中所有子项。我的xhtml中有以下代码。在backingbean中,我根据事件将所有子项设置为checked/unchecked。树最初处于“折叠”模式。当我点击复选框并展开节点时,我可以看到所有被选中的子节点。但是当我在扩展模式中取消选中/签入时,这些值不会反映在子元素中。你能帮我让我知道我错过了什么吗?谢谢 <rich:tree id=

我有一个丰富的树,它包含很少的节点。我在每个节点旁边都有一个复选框。当我选中复选框时,需要选中与所有子项相关的复选框,当我取消选中时,必须取消选中所有子项。我的xhtml中有以下代码。在backingbean中,我根据事件将所有子项设置为checked/unchecked。树最初处于“折叠”模式。当我点击复选框并展开节点时,我可以看到所有被选中的子节点。但是当我在扩展模式中取消选中/签入时,这些值不会反映在子元素中。你能帮我让我知道我错过了什么吗?谢谢

    <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>

尝试将您的
h:selectBooleanCheckBox
包装在
a4j:outputPanel
标记中,然后定义一个id名称,然后在
a4j:support
标记上重新加载此
a4j:outputPanel
。如果仍然没有重新渲染,请尝试在
a4j:outputPanel
上放置
ajaxRendered=“true”
,这将使它始终针对每个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>


它会将您单击树的整个级别渲染为一个级别,因此,如果您正在进行任何ajax调用,那么它将调用第一个节点,并跳过其余节点。整个故事描绘了整个层面。

我猜它的重新招标问题。你确定选中复选框后树会重建吗?谢谢你的回复Ellie-我不确定树是否会完全重建。我添加了与复选框“selected”属性相关的布尔变量作为输出文本。我正在检查的复选框的此值正在更改,但不确定是否正在重新呈现chold元素。嗨,Ellie,尝试了此操作,但这也不会更新与子元素相关的复选框:(请尝试检查节点内复选框的值是否已更新,树是否已正确重建。因为它在折叠模式下工作。我尝试在方法(submitUpdateProduct)中打印支持bean内复选框的值)在选中/取消选中时调用。我将根据是否选中父复选框显式地将所有子元素的值设置为true或false。这些值设置正确。如何确保正确重建树?感谢您的帮助。您可以使用change switchType=“ajax”吗由于您使用的是a4j:support,这意味着它是根据ajax请求启动的。我将尝试根据您的代码创建我自己的示例,看看它是否适用于我的示例。嗨,Ellie,当我在backing bean中将树设置为null时,问题得到了解决。之后,该树得到了正确渲染。非常感谢您的帮助!!顺便说一句-给了您赏金:)你可能会考虑重新澄清你的答案并给出一个例子来说明你的观点。