2014-09-02 65 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?

回答