在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的实例.
以上仅仅是个人的理解和看法, 如有误,请帮忙指出.本人十分感谢.