Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 如何扩展treeTable的所有节点?_Jsf_Primefaces_Expand_Treetable - Fatal编程技术网

Jsf 如何扩展treeTable的所有节点?

Jsf 如何扩展treeTable的所有节点?,jsf,primefaces,expand,treetable,Jsf,Primefaces,Expand,Treetable,我有一个树表和两个按钮: 一个是因为树倒下了 另一种是扩大, 但它们不起作用。在支持bean中,我执行了root.setExpanded(true)和root.setExpanded(false)但它不起作用 <center> <p:treeTable value="#{roleMB.root}" var="roleTreeTableVar" binding="#{roleMB.treeTable}" id="roleTreeTable">

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

  • 一个是因为树倒下了
  • 另一种是扩大,
但它们不起作用。在支持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>

角色名称
角色标识

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

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

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的所有子项都为false 在另一种情况下,塌陷是扩展的
  • setSelected(false)表示未选择此节点

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

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);
....

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

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>

向我们展示您的支持bean代码,但是应该在哪里执行此方法?在getSelection()中?在选举()中?在听众中?在我的例子中,我在树表上创建了一个按钮,这个按钮调用方法collangorexpanding(Treenode,true)如果我想使用colapse,请记住这个指令(n.setSelected(false);)set all node no selectedIt工作得很好!如果primefaces树表已经“内置”了此方法,那么它将非常有用。这是如何实现的?
@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);
    }
}