2011-12-09 7 views
1

私はmenulinksの数、セッションBeanに関連付けられている各を持っています。 Beanはセッション中であるため、異なるメニューリンク間を移動すると値が保持されます。たとえば、2つのメニューリンク、顧客プロファイルとアカウントの詳細があるとします。顧客プロファイルでは、名と姓を入力して顧客の詳細を検索できます。口座詳細ページでは、顧客口座番号を入力することにより、顧客口座の詳細を取得することができます。この場合、ユーザーが無効なアカウント番号を入力すると、検証エラーが表示され、ユーザーが入力した顧客アカウント番号が画面に保持されます。ユーザーが顧客プロファイルリンクに移動して口座詳細画面に戻ると、以前に入力された口座番号がセッション範囲として表示されます。JSF - セッションスコープに管理対象Bean内の値をクリア

これを処理する最善の方法は何ですか?

  1. 私は、ユーザーが別のメニューのリンクに移動したときにセッションからBeanを削除するにはPhaseListenerbeforePhaseにいくつかのコードを持つことができますか?
  2. 私はセッションBeanに関連するメニューのリンクがクリックされるたびに、変数をクリーンアップするために呼び出すことができ、初期化ブロックのいくつかの並べ替えを持っているべきですか?

このシナリオを処理するための任意のベストプラクティスはありますか?

答えて

2

は、セッション内のデータがBeanをスコープスコープ。 Beanをリクエストまたはビューのスコープに入れてください。 RichFacesを使用したJSF1の新しいJSF2ビュースコープは、リクエストスコープBeanを参照する<a4j:keepAlive>をビューに追加することで実現できます。

+0

こんにちはBalusC、アプリケーション全体がセッションスコープのBeanを持っています。 を使用してスコープを変更するには多大な労力が必要ですか?アプリケーションは現在、多くのajax機能を使用していません。アプリケーションがajax関連タグを使用してビュースコープに変換する必要がありますか? –

+0

申し訳ありませんが、最初からアプリケーションがうまく設計されていないと、私は助けません。いいえ、Ajax機能は必須ではありません。 – BalusC

+0

ありがとうBalusC - いつものようにとても貴重なチップ。セッションスコープでマネージドBeanを使用する時期はいつですか?例はありますか? –

1

我々はマネージドBeanが「リセット」され、対応するリンクをクリックしたときに我々はオプション2、すなわちを使用しています。

しかし、あなたはそれはあなたが必要なものを提供するかもしれないいくつかのより多くのスコープ(例えば対話スコープ)を導入するのでSeam Facesを見を持っている場合があります。あなたが要求またはビューを保存しないでください

+0

ありがとうThomas。主にリッチフェイスを使用しています。 Seam Facesが提供するオプションを調べます。オプション1に行くのは悪い習慣ですか?オプション1に問題がありますか? –

+1

@ user1042646さて、私はそれをチェックしませんでしたが、あなたは過度のセッションですべての豆を通過しなければならないかもしれません。さらに、ユーザーのブラウザーアカウントの詳細などが表示されている間に値を消去したくないため、ユーザーが現在ブラウズしているコンテキストを確認することもできます。そのようなコンテキスト内でブラウズが行われていない場合は、スコープ付きBean。 – Thomas

+0

この場合、私がやっているのは、menulinkのそれぞれに属性「menuLink」を追加したことです。 phaseListenerでは、私はmenuLink属性をチェックし、セッションから特定のBeanを削除します。パラメータは渡されないため、会話の途中で値が削除されません。フォームのリセットの場合は、フォームのリセットメソッドを呼び出す場所はどこですか?それはphaselistenerの内側にあるべきですか? –

関連する問題