2012-04-04 7 views
1

私は現在、Java EE 6/JSF 2 webappにいくつかの認可品の共通ロジックを置くために頭を悩ましています: 私には、特定のCookieを別のページにリダイレクトする必要があります。JSF2にロジックのようなフィルタを置く場所

私は3つのソリューションとみなさ:

1)は、これが働いていたサーブレット3.0フィルタ(@WebFilter) を使用し、私もそこに私の管理対象Beanを注入できますが、管理対象Beanは、顔externalContextへのアクセスを必要としますこれは、フィルタの起動時にまだ設定されていないので、私はNPEの位相リスナーがCDIのコンポーネントとすることはできませんので、注入することはできませんので、これは、ぎこちない感じフェーズリスナー を使用)

2管理対象Beanを呼び出してしまいました他のコンポーネント(EL評価を除く)。私のためのphaseListenerは、ナビゲーションロジックを組み込むために技術的に感じています。

3)シーム2.0で、私は「ページアクション」は、このようなもののためにを使用できますが、この概念が、これはのように見えた縫い目にJSF 2.0

にそれをしなかったようだ:

<page view-id="/admin/*.jsf"> 
    <action execute="#{authenticator.checkAccess()}" /> 
</page> 

JSF 2.0にページをレンダリングする前に「コントローラロジック」を実行するという概念がないのは本当ですか?

答えて

2

JSF 2.xでは、あなたはそのようなページイベントに耳を傾けることができます多かれ少なかれ同等の2ページアクションをSeamにされ

<f:metadata> 
    <f:event type="javax.faces.event.PreRenderViewEvent" listener="#authenticator.checkAccess()}" /> 
</f:metadata> 

は(あなたががポストバックをフィルタリングする必要があります)。 Seam FacesのようなCDI拡張機能を使って、デフォルト動作をさらに強化することができます。おそらく、ドキュメントを見て、あなたのニーズに合ったものがあるかどうかを確認するのがいいでしょう。

+0

こんにちは、その特色については知りませんでした。だから、すべてのjsfページがインターセプトされていることを確認したいのであれば、すべてのjsfページにそのコードが含まれていることを確認することが唯一の方法です(ページ構成など)。 – fujan

+0

いいえ、それは確かに唯一の方法ではありません。もし私があなただったら、フィルタオプションでさらに調査します。これは多くのJSFアプリケーションの標準要件であるため、あなたの質問には洗練されたソリューションが必要です。 –

関連する問題