我有一个过滤器,它在Faces Servlet之前映射,并在继续请求之前在HttpSession中填充一些属性
if (_clientUser != null && !_clientUser.isEmpty()) {
session.setAttribute(CLIENT_USER_URI_PARAM_NAME, _clientUser);
filterChain.doFilter(servletRequest, servletResponse);
return;
}
在URI中,有一些信息应该解决任务流
faces/adf.task-flow?adf.tfId=task-flow-definition-id&adf.tfDoc=/WEB-INF/task-flow-definition-id.xml
在我继续请求之后,在有界任务流中有一个方法调用,在视图之前调用(让我们调用视图MainPage),使其成为默认活动
<default-activity>doStuff</default-activity>
Method本身位于PageFlowScoped Managed Bean中,该Bean被添加到task-flow-definition-id.xml
这是在“MainPage”-View
之前调用的doStuff方法 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,还是只创建了一个新的FacesContext,而实际页面(jspx / jsf)加载的时间是什么?
答案 0 :(得分:0)
我找到了答案: 这是Block Post帮助我解决的问题。 http://andrejusb.blogspot.de/2012/02/how-to-fix-data-control-initialization.html