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



我有一个搜索按钮,它应该执行一个备份bean方法,执行一个查询,然后刷新表。我在这个过程中更改了查询的绑定参数。最好的方法是什么?

谢谢!

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

创建视图对象接口的实现。在这里,您可以定义带有将传递给查询的参数的方法。要做到这一点,只需转到视图对象定义-"Java选项卡"-"Java类"编辑并勾选"生成视图对象类:YourViewObjectViewImpl"one_answers"包括绑定变量访问器",然后按确定按钮。找到类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选项卡中,按"客户端界面"上的编辑,并将穿梭refreshQuery方法移动到右侧。按下OK。现在Jdev生成了两个类,它们将帮助你使你的方法在ViewController项目中可见。

下一步是在页面定义绑定中定义refreshQuery。转到页面定义并按绑定面板上的+按钮。从列表中选择methodAction。在"appmoduledat控件"中选择"ViewObject",在"Operation"组合框中选择"refreshQuery method"。在带有参数的表中,可以使用表达式语言定义值。例如#{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();
    }    
}