ADF之ADFUtils.getApplicationModuleForDataControl("AppModuleDataControl")

来源:互联网 发布:淘宝改后台会不会死号 编辑:程序博客网 时间:2024/06/12 20:07

在ADF开发的过程中,我们通常在view层的bean中调用model层的AppModule中的方法.

那首先我们需要得到AppModule.

我们通常会用到ADFUtils, JSFUtils这两个工具包.

我们知道ADF框架很多都是基于元数据来进行配置的.

那么经常就会通过解析el表达式来获取相应的值.

在ADFUtils中的getApplicationModuleForDataControl(String name)方法中.

    public static ApplicationModule getApplicationModuleForDataControl(String name) {        return (ApplicationModule)JSFUtils.resolveExpression("#{data." + name + ".dataProvider}");    }

在找到JSFUtils里的解析表达式的方法去看到.

    public static Object resolveExpression(String expression) {        FacesContext facesContext = getFacesContext();        Application app = facesContext.getApplication();        ExpressionFactory elFactory = app.getExpressionFactory();        ELContext elContext = facesContext.getELContext();        ValueExpression valueExp = elFactory.createValueExpression(elContext, expression, Object.class);        return valueExp.getValue(elContext);    }
通过上面的方法体.我们可以理解为取得各种值的方法其实就是去解析el表达式.

然后通过容器查找,返回我们想要的值.


那么我们在调用ADFUtils.getApplicationModuleForDataControl("AppModuleDataControl")的方法的时候.

这里的参数字符串AppModuleDataControl是怎么确定的呢?

我们都知道在我们在拖动一个model层的数据到页面来的时候.model层的数据就能显示到页面上,那么这些是靠什么联系起来的呢?

这就要注意到在view层我们有一个DataBindings.cpx文件了.这个文件就是负责记录各个页面和页面的定义文件之间的映射以及mdel层AppModule用的

这里我们叫作AppModule的注册吧.

当我们要去用ADFUtils.getApplicationModuleForDataControl("AppModuleDataControl")的时候,一定要确保AppModuleDataControl在DataBindings.cpx文件里进行注册.

否则就取不到AppModule的实例.


以上仅仅是个人的理解和看法, 如有误,请帮忙指出.本人十分感谢.