在调用Bounded Taskflow期间获取应用程序模块

时间:2014-09-02 15:22:39

标签: java oracle oracle-adf facescontext

我有一个过滤器,它在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)加载的时间是什么?

1 个答案:

答案 0 :(得分:0)

我找到了答案: 这是Block Post帮助我解决的问题。 http://andrejusb.blogspot.de/2012/02/how-to-fix-data-control-initialization.html