0

Faces サーブレットの直前にマップし、リクエストを続行する前に 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>

メソッド自体は、Task-flow-definition-id.xml に追加される PageFlowScoped マネージド Bean 内にあります。

「MainPage」ビューの前に呼び出される 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;
    }

ここまではすべて正常に動作します。しかし、アプリケーションモジュールを取得しようとすると. ありません。このアプリケーションは通常、ADFLibrarys によって追加されたさまざまなコンポーネントを保持するルート アプリケーションであるため、DataControl はありませんが、DataBindings.cpx に DataControl を追加し、MainPagePageDef に反復子を追加しました (DataControl をバインディング)しかし、まだ結果はありません。

アプリケーション モジュールにアクセスする方法について何かアドバイスはありますか? FacesServlet は、マネージド Bean が呼び出されるまでに必要な FacesContext を既に作成している必要がありますか、それとも実際のページ (jspx/jsf) が読み込まれるときにのみ新しい FacesContext を作成しますか?

4

1 に答える 1