我有一个过滤器映射只是面孔的Servlet之前和在HttpSession中填充某些属性是与请求获取应用模块
if (_clientUser != null && !_clientUser.isEmpty()) {
session.setAttribute(CLIENT_USER_URI_PARAM_NAME, _clientUser);
filterChain.doFilter(servletRequest, servletResponse);
return;
}
内URI进行之前,有一些信息的该任务的流应该通过使它默认活动
我继续请求有该有界任务流中的一个方法调用该视图之前调用(允许调用视图的MainPage)后加以解决faces/adf.task-flow?adf.tfId=task-flow-definition-id&adf.tfDoc=/WEB-INF/task-flow-definition-id.xml
,
<default-activity>doStuff</default-activity>
方法本身是内PageFlowScoped托管Bean,它被添加到任务流程定义id.xml
这里是doStuff方法,它是“的MainPage”之前调用 - 查看
public class Controller{
public void doStuff {
FacesContext ctx = FacesContext.getCurrentInstance();
Map sessionMap = ctx.getExternalContext().getSessionMap();
String clientUser = (String) sessionMap.get(CLIENT_USER_URI_PARAM_NAME);
AppModImpl am = getApplicationModule();
DBTransaction transaction = am.getDBTransaction();
//do more stuff
}
}
public AppModImpl getApplicationModule() {
FacesContext fc = FacesContext.getCurrentInstance();
Application app = fc.getApplication();
ExpressionFactory elFactory = app.getExpressionFactory();
ELContext elContext = fc.getELContext();
ValueExpression valueExp =
elFactory.createValueExpression(elContext, "#{data.AppModDataControl.dataProvider}", Object.class);
AppModImpl am = (AppModImpl) valueExp.getValue(elContext);
return am;
}
一切工作正常,直到这里。但是如果我尝试获取应用程序模块。没有。 此应用程序通常没有任何DataControl,因为它只是一个根应用程序,其中包含ADFLibrarys添加的不同组件,但我向DataBindings.cpx添加了DataControl,并向MainPagePageDef添加了一个迭代器(仅包含DataControl在绑定中),但仍然没有结果。
你对我有什么建议可以访问应用程序模块吗? FacesServlet在调用Managed Bean时应该已经创建了必要的FacesContext,还是仅在实际的Page(jspx/jsf)加载时才创建新的FacesContext?