0

豊富なツリーがあり、ノードがほとんどありません。各ノードの横にチェックボックスがあります。チェックボックスをオンにすると、すべての子に関連するチェックボックスをオンにする必要があり、チェックを外すと、すべての子をオフにする必要があります。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>
4

2 に答える 2

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>
于 2012-07-11T02:18:22.000 に答える
-1

ツリーをクリックした1つのレベル全体をレンダリングするため、ajax呼び出しがある場合、最初のノードが呼び出され、残りがスキップされます。ストーリー全体がレベル全体をマッピングしています。

于 2013-11-22T04:11:33.560 に答える