0

私が欲しいのは、タブ/ウィンドウごとに異なるセッション Bean です。セッション Bean が機能することはわかっていますが、新しいタブ用に新しいセッション Bean を作成したいと考えています。以下は、新しいセッション Bean が必要な理由です。

page1 にユーザーのリストがあるとします。ユーザーをクリックすると、ページ2にユーザーの詳細が表示されます。

ここで、2 つのタブがあるとします。両方のページに page1.xhtml があります。tab1 で、ユーザー A をクリックしました。page2.xhtml にユーザー A の詳細が表示されます。次に、tab2 に移動します。tab2 で、User B をクリックしました。page2.xhtml に User B の詳細が表示されます 問題は今ここにあります。ここで、tab1 に戻って page2.xhtml を更新すると、ユーザー B の詳細が表示されますが、以前はユーザー A の詳細が表示されていたため、正しくありません。

したがって、私が欲しいのは、新しいタブ/ウィンドウごとの新しいセッションビーンです。

タブ/ウィンドウごとに新しいセッション Bean を作成する方法はありますか? プライムフェイスかアイスフェイスか?


ViewScope が解決策だと思っていましたが、そうではありませんでした。BalusCの記事を参照します。

@ViewScoped:このスコープの Bean は、ブラウザの window/tab で同じ JSF ビューを操作している限り存続し ます。HTTP リクエストで作成され、別のビューにポストバックすると破棄されます。


SessionBean とは、ブラウザ セッション (履歴) ではなく、Java/JSF 管理のセッション管理 Bean を意味します。

4

2 に答える 2

1

If you are using CDI Conversation scope could help.

From the Java EE docs: ConversationScoped

These tutorials might help.

  1. CDI Conversations Part 1
  2. CDI Conversations Part 2

Hope this helps !!!

于 2013-02-27T08:54:22.093 に答える
0

@ViewScoped確かに、この問題の解決策です。問題はUserX、page1.xhtml から移動し、このセッション データを page2.xhtml にロードするときに、データ (ID、詳細など) をセッションに設定しているようです。したがって、これが現在の状況である場合、CDI でさえ@ConversationScoped役に立ちません (cidクエリ文字列パラメーターを使用するため)。

これを解決するには、page2.xhtml の GET リクエストを作成し、userId (または別の便利なパラメーター) を送信して、UserX の詳細を復元する必要があります。

より詳しい情報:

パラメータ (ID など) を暗号化して、パラメータにセキュリティを追加できることに注意してください。これを実現するには、2 番目に提案されているリンクを参照してください。

于 2013-02-27T16:16:12.923 に答える