1

我正在学习 ADF 并有一个问题。我有一个 ADF TreeTable,我想用静态数据临时填充它。我为此使用了一个 bean,但未填充 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 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

1 回答 1

4

TreeTable 需要这种形式的数据:

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

在您上面的示例中, RowModel 类没有与之关联的任何子级。我将举一个非常通用的 Employee 示例,向您展示如何使用 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>
于 2013-05-13T11:38:31.790 回答