【问题标题】:How to expand all the nodes of treeTable?如何展开treeTable的所有节点?
【发布时间】:2012-08-12 07:44:37
【问题描述】:

我有一个树形表和两个按钮:

  • 一个用于折叠树和
  • 另一个用于扩展,

但它们不起作用。在 backing bean 上我做了 root.setExpanded(true);root.setExpanded(false); 但它不起作用。

<center>
    <p:treeTable value="#{roleMB.root}" var="roleTreeTableVar"
        binding="#{roleMB.treeTable}" id="roleTreeTable">
        <f:facet name="header">
            <center>
                <p:commandButton value="Réduire tout"
                    icon="ui-icon-folder-collapsed" style="font-size: 0.9em" 
                    actionListener="#{roleMB.expandAll}" 
                    update=":roleTreeTableForm:roleTreeTable"  />
                <p:spacer width="30px" />
                <p:commandButton value="Développer tout"
                    icon="ui-icon-folder-open" style="font-size: 0.9em"  
                    actionListener="#{roleMB.collapseAll}" 
                    update=":roleTreeTableForm:roleTreeTable"  />
                <p:spacer width="30px" />
            </center>
        </f:facet>

        <p:column style="width:150px">
            <f:facet name="header"> 
                Nom de Role 
            </f:facet>
            <h:outputText value="#{roleTreeTableVar.nom}" />
        </p:column>

        <p:column style="width:100px">
            <f:facet name="header"> 
                Id de role 
            </f:facet>
            <h:outputText value="#{roleTreeTableVar.id}" />
        </p:column>

        <p:column style="width:20px">
            <p:commandLink oncomplete="dlgAddRole.show()" value="Ajouter"
                update=":addRoleForm:selectRolesNamesId">
                <f:setPropertyActionListener value="#{roleTreeTableVar}"
                    target="#{roleMB.selectedRole}" />
            </p:commandLink>
            <p:commandLink oncomplete="delRole.show()" value="Supprimer">
                <f:setPropertyActionListener value="#{roleTreeTableVar}"
                    target="#{roleMB.selectedRole}" />
            </p:commandLink>
            <p:commandLink oncomplete="editRole.show()" value="Modifier">
                <f:setPropertyActionListener value="#{roleTreeTableVar}"
                    target="#{roleMB.selectedRole}" />
            </p:commandLink>
        </p:column>
    </p:treeTable>
</center>

【问题讨论】:

  • 向我们展示您的支持 bean 代码

标签: jsf primefaces expand treetable


【解决方案1】:

这是折叠和展开的递归方法。

public void collapsingORexpanding(TreeNode n, boolean option) {
    if(n.getChildren().size() == 0) {
        n.setSelected(false);
    }
    else {
        for(TreeNode s: n.getChildren()) {
            collapsingORexpanding(s, option);
        }
        n.setExpanded(option);
        n.setSelected(false);
    }
}
  • 变量 n 是您想要展开或折叠的节点。
  • 当变量选项为 false 时,n 的所有子项为 在另一种情况下,折叠是展开的
  • setSelected(false) 表示该节点未被选中

【讨论】:

  • 但是应该在哪里执行这个方法呢?在 getSelection() 中?在 setSelection() 中?在听众?请
  • 在我的例子中,我在 treeTable 上创建了一个按钮,这个按钮调用方法 collapsingORexpanding(Treenode, true) 如果我希望折叠,请记住这条指令 (n.setSelected(false);) 设置所有节点没有选择
  • 它就像一个魅力!如果 primefaces TreeTable 已经“内置”了这种方法,那将非常有用
【解决方案2】:

您应该将expanded 属性设置为true,不仅针对根节点,还针对所有子节点。

【讨论】:

  • 这怎么实现?
【解决方案3】:

可能的解决方案可能如下所示:

view.xhtml
<h:form id="form">
    ...
    <p:commandButton update=":form:tree" actionListener="#{view.collapseAll}"
            icon="fa fa-minus" title="#{msg.collapseAll}"/>                             
    <p:commandButton update=":form:tree" actionListener="#{view.expandAll}"
            icon="fa fa-plus" title="#{msg.expandAll}"/>
    ...
    <p:treeTable id="tree" ...>
    ...
    </p:treeTable>
    ...
</h:form>
View.java
@Named
@ViewScoped
public class View implements Serializable {

    private TreeNode root;

    ...

    public void collapseAll() {
        setExpandedRecursively(root, false);
    }

    public void expandAll() {
        setExpandedRecursively(root, true);
    }

    private void setExpandedRecursively(final TreeNode node, final boolean expanded) {
        for (final TreeNode child : node.getChildren()) {
            setExpandedRecursively(child, expanded);
        }
        node.setExpanded(expanded);
    }
}

【讨论】:

    【解决方案4】:

    对于问题:“如何实现?” 在代码中...

    public void reloadTree() {
    
    
        assocRoot = new DefaultTreeNode();
        assocRoot.setExpanded(true);
    
        TreeNode currentAssocNode;
        AbstractDocument parentAssoc = getParentDocAssociation();
        if(parentAssoc !=null) {
            TreeNode parentAssocNode = new DefaultTreeNode(parentAssoc);
            parentAssocNode.setExpanded(true);
    ....
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-02
      • 2023-03-10
      • 2010-10-05
      • 2013-11-10
      • 2019-09-04
      • 1970-01-01
      相关资源
      最近更新 更多