2011-10-19 3 views
0

アプリケーションでは、各ユーザー・タブごとにポートレットが定義されています。新しいポートレットに移動する前にJSFセッションをクリアする

  • 我々はJSF 1.2 +ポートレットを使用しています。
  • ユーザ があるタブから別のタブにナビゲートするときに、FacesContext Session管理Beanをクリアしたいとします。

これを達成するにはどうすればよいでしょうか?

  • ユーザーが タブ(ポートレット)を去る前に、私たちはセッション管理対象Beanを削除する コードを書くことができる利用可能な任意のポートレットのアンロード機能があります。
+0

マネージドBeanを@SessionScopedにする必要がありますか?あなたのシナリオでは、ビューまたは会話のスコープがはるかに良いと思われる。 – jFrenetic

+0

JSF 1.2を使用しているので、ビューのスコープを使用することはできません – Greg

+0

CDIは利用可能ですか?そうであれば、会話範囲があります。 – jFrenetic

答えて

1

あなたはJSF 1.2を使用しているので、まさにこの目的のために設計された新しいビューのスコープの利点を取ることができないため、あなたの最善の策はMyFaces TomahawkまたはMyFaces Orchestraをつかむことです。 "view"スコープのBeanをセッションスコープからリクエストスコープに戻す必要があります。

新しいJSF 2.0ビュースコープをシミュレートする場合、つまり同じビューとやりとりしている限りBeanが存続する場合は、リクエストスコープBeanを参照するビューにTomahawkの<t:saveState>を追加する必要があります。

<h:form> 
    <h:inputText value="#{bean.input}" /> 
    <h:commandButton value="Submit" action="#{bean.submit}" /> 
    <t:saveState value="#{bean}" /> 
</h:form> 

同じブラウザタブ内の複数のビューをまたがることができ、新たなCDIの対話スコープを、シミュレートしたい場合は、オーケストラを統合する必要があると思います。

関連する問題