1

Web ページに 2 つのリンクがあり、1 パイントを appserver/?dept=1 にリンクし、2 つ目のリンクは appserver/?dept=2 です。次に、JSF フェーズ リスナーがあり、そこでバックエンド Bean を取得し、Bean パラメーターとして dept1 または dept2 を設定して、さまざまな部門のコンテンツをレンダリングできます。ユーザーが上記の Web ページから 2 つのウィンドウを起動すると、dept1 ウィンドウの内容が dept2 ウィンドウに移動する可能性があります。すべてめちゃくちゃ。(デスクトップ ショートカットからブラウザを起動する場合は、上記のリンクを入力します。2 つのセッションが作成され、2 つの異なるバックエンド Bean インスタンスが作成されるため、問題ありません)。

主な理由は、JSF ストア バック Bean がセッションにあるため、同じ親ウィンドウから同じセッション ID (Cookie) を共有し、同じバックエンド Bean クラス インスタンスを使用した 2 つのウィンドウです。結果のレンダリング時に、結果はどちらのウィンドウにも表示されます。

このウィンドウ クロス コンテンツの状況を回避するにはどうすればよいですか? これは、ずっと前に解決されるべき基本的な Web アプリの問題のようです。または、私は本当に間違ったことをしているかもしれません。

Seam 変換を試みましたが、助けはありません。JSF2.0 にはビュー スコープ、CDO があります。それは助けることができます線量?諸事情によりまだJSF2.0に移行できません。JAVA6、Tomcat6.20、Icefaces を使用しています。任意のヘルプが割り当てられます。

4

3 に答える 3

1

JSF 1.x では、最善の策はTomahawk の <t:saveState>. ブラウザのタブ/ウィンドウに関係なく、同じページによって起動される後続のリクエストで、指定されたリクエスト スコープ Bean が保持されるページに配置するだけです。

<t:saveState value="#{bean}" />

これは、JSF 2.0 ビュー スコープのように機能します。

于 2010-12-06T02:24:24.613 に答える
0

MyFaces Orchestraをご覧ください。

于 2010-12-06T08:49:50.290 に答える
0

あなたの問題は、seam 会話を使用することで簡単に解決できます。seam パッケージに付属の例を見ることができます。バッキング Bean スコープをセッションから会話に変更し、ページ パラメーターを使用する必要があります。また、シーム イン アクション ブックでは、この使用例を非常に簡潔な例で説明しています。

于 2010-12-06T07:25:58.953 に答える