数据表行扩展树表

Datatable row expansion Treetable

此示例包括列出角色,对于每个角色,我想显示与其关联的组和用户。

XHTML

        <p:column headerText="Designation">
            <h:outputText value="#{rl.designation}" />
        </p:column>


            <p:rowExpansion>
                <p:treeTable value="#{roleMB.root}" var="document">
                  <p:column headerText="Designation">
                   <h:outputText value="#{document}" />
                   </p:column>
                 </p:treeTable>
            </p:rowExpansion>
</p:dataTable>

控制器

用于显示每个角色的树表的方法。

public void createRoot(){
        List<AffectationRoleGroupe> groupesRole=new ArrayList<AffectationRoleGroupe>();
        for(Role rl:roles){

        root=new DefaultTreeNode("Root", null);

        groupesRole=rl.getAffectationsRG();
        for(AffectationRoleGroupe a:groupesRole){
            System.out.println(rl.getDesignation());
            System.out.println(a.getGroupe().getDesignation());
            TreeNode node = new DefaultTreeNode( a.getGroupe().getDesignation(), root);
        }
    }

首先,您缺少触发每个角色列表组生成的 rowToggle 事件:

<p:ajax event="rowToggle" listener="#{managedBean.createRoot(role)}" update=":treeGroupe" />

<p:rowExpansion>
    <p:treeTable id="treeGroupe" value="#{roleMB.root}" var="groupe">
        <p:column headerText="Designation">
            <h:outputText value="#{groupe.designation}" />
        </p:column>
    </p:treeTable>
</p:rowExpansion>

第二,在你的方法中,你应该传递你正在收集的角色,然后你必须用角色组填充树的节点:

public void createRoot(Role role){
    ......
}

您可以看到如何整理 treeTable :http://www.primefaces.org/showcase/ui/data/treetable/basic.xhtml