我是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方法并返回我想要的行,但是退回行似乎是错误的方法吗?
答案 0 :(得分:0)
在这种情况下使用托管bean本身就是一种错误的方法
您所需要的只是创建符合您期望的viewObject
创建一个连接Location + Department表的viewObject。通过viewLink将其设为子视图对象。
现在您可以在页面上拖放主要详细信息表。