0

我有一个过滤器,它在 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>

方法本身位于 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 中添加了一个迭代器(只是为了在绑定)但仍然没有结果。

您对我如何访问应用程序模块有什么建议吗?在调用托管 Bean 时,FacesServlet 应该已经创建了必要的 FacesContext,还是仅在实际页面(jspx/jsf)加载时创建一个新的 FacesContext?

4

1 回答 1

0

我找到了自己的答案:这是帮助我弄清楚的 Block Post。 http://andrejusb.blogspot.de/2012/02/how-to-fix-data-control-initialization.html

于 2014-09-02T16:11:57.343 回答