如何在使用adf业务组件时从托管bean填充jsf表?

时间:2015-10-12 06:48:00

标签: java oracle-adf

我是ADF的新手,似乎我错过了一些东西。我正在使用Oracle HR数据库。我使用业务组件作为模型。我有国家,位置和部门的ViewObjects。以及FK在Country-Location和Location-Department之间的ViewLinks。我暴露了一个DataControl Country->位置 - > Deperatments。

所以现在我可以构建一个包含三个区域的JSF,每个区域都显示出来。如果我点击一个国家,我会获得位置。如果我然后点击位置我得到部门。这很有效。

但我想只展示国家和部门。所以我实现了一个托管bean来利用迭代器,并通过将bean绑定到表的value属性来填充该bean的department表。但是我只返回Row对象,并且由于使用BC没有类定义,我可以将行映射回对象。

那我怎样才能展示一个国家的所有部门呢? ADF的做法是什么?

我的托管bean:

public class CountryDepartmensBean {

public CountryDepartmensBean() {
    super();
}

private ArrayList<Row> populate;

public ArrayList<Row> getPopulate() {
    DCBindingContainer bindings = (DCBindingContainer)BindingContext.getCurrent().getCurrentBindingsEntry();
    DCIteratorBinding countriesView1Iterator = bindings.findIteratorBinding("CountriesView1Iterator");

    DCIteratorBinding locationsView2Iterator = bindings.findIteratorBinding("LocationsView2Iterator");
    DCIteratorBinding departmentsView3Iterator = bindings.findIteratorBinding("DepartmentsView3Iterator");
    Row[] locations =  locationsView2Iterator.getAllRowsInRange();
    ArrayList<Row> employees = new ArrayList<Row>();
    for(int i = 0; i < locations.length; i++){
        locationsView2Iterator.setCurrentRowIndexInRange(i);
        departments.addAll(Arrays.asList(departmentsView3Iterator.getAllRowsInRange()));
    }

    return departments;
}

public void setPopulate(Row[] rows){

}
}

调用getPopulate方法并返回我想要的行,但是退回行似乎是错误的方法吗?

1 个答案:

答案 0 :(得分:0)

在这种情况下使用托管bean本身就是一种错误的方法 您所需要的只是创建符合您期望的viewObject 创建一个连接Location + Department表的viewObject。通过viewLink将其设为子视图对象。
现在您可以在页面上拖放主要详细信息表。