2014-09-02 24 views
0

我有一个过滤器映射只是面孔的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?

回答