如何在treetable primefaces中显示Parent和Child(两个不同的对象)?

时间:2014-04-28 09:24:39

标签: jsf jsf-2 primefaces jsf-2.2 primefaces-extensions

我正在使用Treetable组件来显示父对象和子对象。我可以使用this tutorial.

显示父内容

在我的例子中,我使用两个不同的对象来显示TreeTable组件中的内容。这些对象如下。

  
      
  1. 大学明细 - 这是我的父对象。它包含(每个大学的ID和名称)以及儿童学院。
  2.   
  3. 学院详情 - 这是我的孩子对象。它包含每个学院的(身份证和姓名)。
  4.   

UniversityDetail Class

public class UniversityDetail implements Serializable {

    /**
     * serialVersionUID -   
     */
    private static final long serialVersionUID = 1L;
    /**
     * UniversityId -   
     */
    private Integer UniversityId;
    /**
     * UniversityName   -   
     */
    private String UniversityName;
    /**
     * CollegeDetail    -
     */
    private List<CollegeDetail> CollegeDetail   =   new ArrayList<CollegeDetail>();

    public Integer getUniversityId() {
        return UniversityId;
    }

    public void setUniversityId(Integer UniversityId) {
        this.UniversityId = UniversityId;
    }

    public String getUniversityName() {
        return UniversityName;
    }

    public void setUniversityName(String UniversityName) {
        this.UniversityName = UniversityName;
    }

    public List<CollegeDetail> getCollegeDetail() {
        return CollegeDetail;
    }

    public void setCollegeDetail(
            List<CollegeDetail> collegeDetail) {
        this.CollegeDetail = collegeDetail;
    }

}

学院详情

public class CollegeDetail implements Serializable{

    /**
     * CollegeId    -   
     */
    private Integer CollegeId;
    /**
     * CollegeName  -
     */
    private String CollegeName;

    public Integer getCollegeId() {
        return CollegeId;
    }

    public void setCollegeId(Integer CollegeId) {
        this.CollegeId = CollegeId;
    }

    public String getCollegeName() {
        return CollegeName;
    }

    public void setCollegeName(String CollegeName) {
        this.CollegeName = CollegeName;
    }

}

如何使用treetable组件显示这些详细信息类?我不知道如何迭代子元素(学院细节)

我有以下xhtml代码来显示父级和子级。我可以渲染父细节。但我无法呈现子类详细信息。非常感谢任何帮助。

<p:treeTable value="#{ManagedBean.root}" var="object" id="multiSelect"  
             selection="#{ManagedBean.selectedNodes}" selectionMode="checkbox">  

    <f:facet name="header">  
        College Dropdown  
    </f:facet>  

    <p:column style="width:100px">  
        <f:facet name="header">  
            University Name  
        </f:facet>  
        <h:outputText value="#{object.universityName}" />  
    </p:column>  

    <p:column style="display:none">  
        <f:facet name="header">  
            University ID
        </f:facet>  
        <h:outputText value="#{object.universityId}" />  
    </p:column>  

</p:treeTable>

ManagedBean

RootTree = new CheckboxTreeNode("Root", null);
for(int i =0 ; i<CompanyDetail.size();i++) {
UniversityDetail universityDetail   = UniversityDetail.get(i);
    List<CollegeDetail> collegeDetail   =   universityDetail.getCollegeDetail();
    TreeNode parent = new CheckboxTreeNode(universityDetail,RootTree);
    for(int j=0; j<collegeDetail.size();j++) {
    TreeNode child = new CheckboxTreeNode(collegeDetail.get(j).getCollegeName(),collegeDetail.get(j), parent);                  
   }

2 个答案:

答案 0 :(得分:1)

您的XHTML页面与back bean不同。 但在你的情况下,你可以创建另一个只有那些需要显示的属性的类。并使用该类显示在XHTML页面上。 让我们知道是否不起作用。

答案 1 :(得分:0)

解决方案:

ManagedBean树getter:

private TreeNode tree;

public TreeNode getTree() {
    if (tree == null) {

        tree = new CheckboxTreeNode("root", null);

        for (UniversityDetail u : universityDetailList) {
            TreeNode uNode = new CheckboxTreeNode("university" ,u ,tree);
            for (CollegeDetail c : u.getCollegeDetail()) {
                TreeNode cNode = new CheckboxTreeNode("collage" ,c ,uNode);
            }
        }
    }

    return tree;

}

<强> XHTML:

<p:treeTable value="#{ManagedBean.tree}" var="object" nodeVar="node" id="multiSelect"  
             selection="#{ManagedBean.selectedNodes}" selectionMode="checkbox">  

    <f:facet name="header">  
        College Dropdown  
    </f:facet>  

    <p:column> 

        <p:treeNode type="university" rendered="#{node.type == 'university'}">
            <h:outputText value="#{object.universityName}" />
        </p:treeNode>

        <p:treeNode type="college" rendered="#{node.type == 'college'}">
            <h:outputText value="#{object.collegeName}" />
        </p:treeNode>

    </p:column>  

    <p:column> 

        <p:treeNode type="university" rendered="#{node.type == 'university'}">
            <h:outputText value="#{object.universityId}" />
        </p:treeNode>

        <p:treeNode type="college" rendered="#{node.type == 'college'}">
            <h:outputText value="#{object.collegeId}" />
        </p:treeNode>

    </p:column>  

</p:treeTable>

提示:使用带有节点类型的呈现属性:

rendered="#{node.type == 'university'}"