2013-05-08 54 views
1

我正在学习ADF并且有一个问题。我有一个ADF TreeTable,我想临时填充静态数据。我为此使用了一个bean,但TreeTable没有被填充。有人可以检查我的代码,并告诉我,如果我做错了什么?ADF用bean填充TreeTable

我treetable中

 <af:treeTable rowBandingInterval="0" id="tt1" width="100%" value="#{viewScope.MyBean.treeData}"> 
     <f:facet name="nodeStamp"> 
      <af:column sortable="false" headerText="" id="c4"> 
      <af:outputText value="#{row.col1}" id="ot2"/> 
      </af:column> 
     </f:facet> 

     <af:column sortable="false" headerText="Score" align="center" id="c5"> 
      <af:outputText value="#{row.col2}" id="ot6"/> 
     </af:column> 

     <af:column sortable="false" headerText="Verified by " align="center" id="c3"> 
      <af:outputText value="#{row.col3}" id="ot1"/> 
     </af:column> 
     <af:column sortable="false" headerText="On" align="center" id="c1"> 
      <af:outputText value="#{row.col4}" id="ot5"/> 
     </af:column> 
     </af:treeTable> 

RowMaker.class

public List row() { 
      List<rowModel> ls = new ArrayList<rowModel>(); 

      for (int i = 0; i < 10; i++) { 
       rowModel tr = new rowModel("+","92%","Person X","14 Feb 2013"); 
       ls.add(tr); 
      }    
      return ls; 
     } 

RowModel.class 

public class rowModel { 

    String col1, col2, col3, col4; 

    public rowModel(String col1, String col2, String col3, String col4) { 
     this.col1 = col1; 
     this.col2 = col2; 
     this.col3 = col3; 
     this.col4 = col4; 
    } 

    public String getCol1() { 
     return col1; 
    } 
    public String getCol2() { 
     return col2; 
    } 
    public String getCol3() { 
     return col3; 
    } 
    public String getCol4() { 
     return col4; 
    } 
} 

Managed Bean的

<managed-bean id="__7"> 
    <managed-bean-name id="__5">MyBean</managed-bean-name> 
    <managed-bean-class id="__8">com.im.popup.view.rowMaker</managed-bean-class> 
    <managed-bean-scope id="__6">view</managed-bean-scope> 
    </managed-bean> 

回答

4

的treetable中期望这种形式的数据:

Manager1 
|-Employee1 
|-Employee2 
Manager2 
|-Employee3 
|-Employee4 

在上面的示例中,RowModel类没有任何与之关联的子项。我会采取一个非常通用的员工例子,告诉你如何通过treetable中工作:

class Employee{ 
    private String firstName; 
    private String lastName; 
    private List<Employee> directs; 
    Employee(String fName, String lName){ 
    firstName = fName; 
    lastName = lName; 
    directs = new ArrayList<Employee>(); 
    } 
    //Getters and setters for above 
    public void addDirect(Employee emp){ 
    directs.add(emp); 
    } 
} 

让我们看看开创了treetable中的数据:

class TreeTablePageModel{ 
    List<Employee> managers = new ArrayList<Employee>(); 

    ChildPropertyTreeModel treeModel; 
    public TreeTablePageModel(){ 
    Employee mgr1 = new Employee("First","Manager"); 
    Employee mgr2 = new Employee("Second","Manager"); 
    Employee mgr3 = new Employee("Third","Manager"); 

    Employee emp = new Employee("First","Sub_1"); 
    mgr1.addDirect(emp); 
    emp = new Employee("First","Sub_2"); 
    mgr1.addDirect(emp); 

    emp = new Employee("Second","Sub_1"); 
    mgr2.addDirect(emp); 
    emp = new Employee("Second","Sub_2"); 
    mgr2.addDirect(emp); 

    emp = new Employee("Third","Sub_1"); 
    mgr3.addDirect(emp); 
    emp = new Employee("Third","Sub_2"); 
    mgr3.addDirect(emp); 
    treeModel = new ChildPropertyTreeModel(managers,"directs"); 
    } 

    public ChildPropertyTreeModel getTreeModel(){ 
    return treeModel; 
    } 
} 

在上面的代码我包裹将我的Employee对象列表添加到ChildPropertyTreeModel中,并将其传递给ADF组件可使用它获取其子级值的属性的名称。而在JSP我将访问数据为:

<af:treeTable rowBandingInterval="0" id="tt1" width="100%" value="#{viewScope.pageData.treeModel}"> 
<!-- add columns here --> 
</af:treeTable> 

和我的管理bean声明将是:

<managed-bean id="__7"> 
    <managed-bean-name id="__5">pageData</managed-bean-name> 
    <managed-bean-class id="__8">com.im.popup.view.TreeTablePageModel</managed-bean-class> 
    <managed-bean-scope id="__6">view</managed-bean-scope> 
</managed-bean>