如何展开rich:treeNode

How to expand rich:treeNode

我想根据 rootNode 数据类型中的 属性 展开一些树节点。 我已经尝试 'expand' 和 'expanded' 在 rich:treeNode 中使用值“#{true}”,但它们似乎没有效果。

<rich:tree id="tree" ajaxSubmitSelection="true" switchType="ajax" styleClass="expand-img-custom" 
                        value="#{ruleDefBackingBean.rootNode}" var="node" showConnectingLines="true">
                        <rich:treeNode id="node#{node.nodeText}" >
                            <h:selectBooleanCheckbox styleClass="varChkBox" value="#{node.selected}">
                                <a4j:support event="onclick" actionListener="#{ruleDefBackingBean.selectNode}"  reRender="node#{node.nodeText}" />
                            </h:selectBooleanCheckbox>

                            <h:outputText value="#{node.nodeText}" rendered = "#{node.nodeId eq node.categoryId and node.parentNode eq 'true'}" styleClass="legend textBold" style="display:inline;">
                                <span class="dynatree-icon rule-tree-parent-img" ></span>   
                            </h:outputText>
                            <h:outputText value="#{node.nodeText}" rendered = "#{node.nodeId ne node.categoryId or  node.parentNode ne 'true'}"  styleClass="textNormal legend" style="display:inline;">
                                <span class="dynatree-icon rule-tree-child-img" ></span>    
                            </h:outputText>

                        </rich:treeNode>
                    </rich:tree>

应该怎么做才能让它发挥作用?

已使用 adviseNodeOpened

 <rich:tree id="tree" ajaxSubmitSelection="true" switchType="ajax" styleClass="expand-img-custom" 
    value="#{ruleDefBackingBean.rootNode}" var="node" showConnectingLines="true" adviseNodeOpened="#{ruleDefBackingBean.adviseNodeOpened}">
    <rich:treeNode id="node#{node.nodeText}" changeExpandListener="#{ruleDefBackingBean.setDisableAdviseNodeOpened}">
        <h:selectBooleanCheckbox styleClass="varChkBox" value="#{node.selected}">
            <a4j:support event="onclick" actionListener="#{ruleDefBackingBean.selectNode}"  reRender="node#{node.nodeText}" />
        </h:selectBooleanCheckbox>

        <h:outputText value="#{node.nodeText}" rendered = "#{node.nodeId eq node.categoryId and node.parentNode eq 'true'}" styleClass="legend textBold" style="display:inline;">
            <span class="dynatree-icon rule-tree-parent-img" ></span>   
        </h:outputText>
        <h:outputText value="#{node.nodeText}" rendered = "#{node.nodeId ne node.categoryId or  node.parentNode ne 'true'}"  styleClass="textNormal legend" style="display:inline;">
            <span class="dynatree-icon rule-tree-child-img" ></span>    
        </h:outputText>
    </rich:treeNode>
</rich:tree>

*.java

    public boolean disableAdviseNodeOpened;

    public boolean isDisableAdviseNodeOpened() {
        return disableAdviseNodeOpened;
    }

    public void setDisableAdviseNodeOpened(boolean disableAdviseNodeOpened) {
        this.disableAdviseNodeOpened = disableAdviseNodeOpened;
    }

    public void setDisableAdviseNodeOpened(org.richfaces.event.NodeExpandedEvent event) {
        this.disableAdviseNodeOpened = true;
    }

    public Boolean adviseNodeOpened(UITree tree) {
        if (disableAdviseNodeOpened) return null;
        Object rowKey = tree.getRowKey();
        TreeNode<NodeData> selectedNode = tree.getModelTreeNode(rowKey);
        boolean currentlyNodeSelected = ((NodeData) selectedNode.getData()).isSelected();
        if (currentlyNodeSelected) {
            return Boolean.TRUE;
        }
        return null;
    }