如何在ADF中获取我想要的行

时间:2013-06-12 00:13:36

标签: oracle-adf jdeveloper

如何在ADF中完成这个简单的任务 -

基于某些参数,我希望以编程方式从视图对象中检索行。我不知道如何做到这一点。如果我不使用ADF,我的业务方法会有如下所示的查询,然后在对象的表单中返回我想要的任何细节。
* select * from abcTable,其中abccolumn = param1; *

param1是jsf页面的输入。我捕获该输入并基于该输入我需要查询另一个数据库表(它将以ADF中的View对象的形式)来检索其他详细信息并填充jsf页面中的一些其他组件。我该如何完成这项任务。我试图获取视图对象的实例,但我似乎没有找到任何方法使用我只能检索我想要基于where子句的有限行。 executeQuery方法不返回任何内容(奇怪的情况)。

3 个答案:

答案 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>");
}