在辅助bean中执行查询并在ADF中更新表的正确方法

时间:2016-10-04 23:52:17

标签: oracle oracle-adf

我有一个搜索按钮,应该执行支持bean方法,执行查询然后刷新表。我正在更改进程中查询的绑定参数。这样做的最佳方式是什么?

谢谢!

1 个答案:

答案 0 :(得分:4)

最好的方法是遵循MVC模型。要做到这一点,只需使用此算法:

创建viewobject接口的实现。在这里,您可以使用将传递给查询的参数定义方法。要做到这一点,只需转到Viewobject定义 - “Java选项卡” - “Java类”编辑并选中“生成视图对象类:YourViewObjectViewImpl”和“包含绑定变量访问器”,然后按确定按钮。找出类YourViewObjectViewImpl.java并使用您需要的参数实现方法。     例如,您需要2个参数来刷新您的VO:

public class YourViewObjectViewImpl extends ViewObjectImpl {

    // Generated method
    public void setA(Long value) {
        setNamedWhereClauseParam(value);
    }

    // Generated method
    public void setB(Long value) {
        setNamedWhereClauseParam(value);
    }

    // Your custom method
    public void refreshQuery(long a, long b) {
        this.clearCache();
        setA(a);
        setB(b);
        this.executeQuery();
    }
}

现在,您需要为ViewController提供此方法。在ViewObject定义的java选项卡中,按“客户端界面”上的编辑,然后将shuttle refreshQuery方法移到右侧。按确定。现在,Jdev会生成两个类,它们将使您在ViewController项目中显示您的方法。

下一步是在页面定义绑定中定义refreshQuery。 转到页面定义,然后在“绑定”面板上按+按钮。从列表中选择methodAction。从AppModuleDataControl中选择ViewObject,然后在Operation组合框中选择refreshQuery方法。在带参数的表中,您可以使用表达式语言定义值。例如#{viewScope.myBean.a}和#{viewScope.myBean.b}按ok。

现在您可以从bean执行此方法,例如:

public class MyBean {
    public Long a = 0;
    public Long b = 0;

    public void refresh() {
        a = 1;
        b = 2;
        BindingContext bc = BindingContext.getCurrent();
        DCBindingContainer dcbc = (DCBindingContainer)bc.getCurrentBindingsEntry();
        dcbc.getOperationBinding("refreshQuery");
        dcbc.execute();
    }    
}