如何在ADF中完成这个简单的任务 -
基于某些参数,我希望以编程方式从视图对象中检索行。我不知道如何做到这一点。如果我不使用ADF,我的业务方法会有如下所示的查询,然后在对象的表单中返回我想要的任何细节。
* select * from abcTable,其中abccolumn = param1; *
param1是jsf页面的输入。我捕获该输入并基于该输入我需要查询另一个数据库表(它将以ADF中的View对象的形式)来检索其他详细信息并填充jsf页面中的一些其他组件。我该如何完成这项任务。我试图获取视图对象的实例,但我似乎没有找到任何方法使用我只能检索我想要基于where子句的有限行。 executeQuery方法不返回任何内容(奇怪的情况)。
答案 0 :(得分:1)
您可以通过编程方式过滤viewObject并获取行 - 您可以使用2种方法过滤viewObject 1. where子句 2. filterdRows 见 - Get Filtered Rows From View Object in Oracle ADF
答案 1 :(得分:0)
VO有一个setWhereClause方法,您可以使用该方法向查询添加/修改where子句。 您还可以使用绑定参数查询预定义VO。
UI方面的更多信息: ADF Query with Parameters and List of Values 和 ADF Query with Parameters and List of Values - Part II
答案 2 :(得分:0)
将参数绑定到bean中的变量。让我们说你想要的 从中搜索值并输入文本:
在页面上:
<af:inputText id="it8" binding="#{pageFlowScope.<YOURBEAN>.inputSearchBox}"/>
在您的bean中:
private RichInputText inputSearchBox;
public void setInputSearchBox(RichInputText inputSearchBox) {
this.inputSearchBox= inputSearchBox;
}
public RichInputText getInputSearchBox() {
return inputSearchBox;
}
在bean中创建一个可以进行搜索的方法:
在页面上:
<af:commandButton text="search" id="cb6" actionListener="#{pageFlowScope.<YOURBEAN>.search}"/>
在bean :
public void search(ActionEvent actionEvent) {
}
在此方法中,您需要从AppModuleImpl获取ViewObject:
BindingContext bindingContext = BindingContext.getCurrent();
DCDataControl dc =bindingContext.findDataControl("YOURAPPMODULEDATACONTROL");
AppModuleImpl appM = (AppModuleImpl )dc.getDataProvider();
ViewObjectImpl vo = appM.getYourVO();
使用您在输入中输入的文本在该viewObject上创建并应用视图条件:
String searchValue = null;
//get the value from the search field
if (inputSearchBox.getValue() != null) {
searchValue = inputSearchBox.getValue().toString();
}
ViewCriteria vc = vo.createViewCriteria();
ViewCriteriaRow vcRow = vc.createViewCriteriaRow();
vcRow.setAttribute("Field you want to search by", searchValue);
vc.addRow(vcRow);
vo.applyViewCriteria(vc);
vo.executeQuery();
现在,ViewObject会被您的搜索值过滤掉。 如果你想要查看结果并从该行保存一些VO值,你需要创建一个行迭代器,遍历它并在一些变量中存储你需要的值:
RowSetIterator rsi = vo.getRowSetIterator();
String valueToGet = null;
while (rsi.hasNext()){
Row r = rsi.next();
valueToGet = (String)r.getAttribute("<WHAT ATTRIBUTE YOU WANT TO GET>");
}