0

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

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

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

4

3 回答 3

1

您可以通过编程方式过滤 viewObject 并获取行 - 您可以使用 2 种方法过滤 viewObject 1. where 子句 2. filterdRows请参阅 - Get Filtered Rows From View Object in Oracle ADF

于 2013-06-12T05:58:24.047 回答
0

VO 有一个 setWhereClause 方法,可用于向查询添加/修改 where 子句。您还可以使用绑定参数查询预定义 VO。

UI 方面的更多信息: ADF Query with Parameters and List of ValuesADF Query with Parameters and List of Values - Part II

于 2013-06-14T18:37:13.177 回答
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}"/>

在豆中

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>");
}
于 2017-01-11T08:55:45.427 回答