質問

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

主な理由は、セッションのJSFストアバックビーンです。したがって、同じ親ウィンドウから同じセッションID(Cookie)を共有した2つのWindowsは、同じバックエンドBeanクラスインスタンスを使用しました。レンダリング結果時に、結果はいずれかのウィンドウに移動できます。

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

Seam Conversionを試しましたが、JSF2.0にはView Scope、CDOがあります。それは助けることができますか?さまざまな理由により、まだJSF2.0に移動することはできません。 Java6、Tomcat6.20、アイスフェイスを使用しています。どんな助けも充当されます。

役に立ちましたか?

解決

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

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

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

他のヒント

あなたの問題は、Seamの会話を使用することで簡単に解決できます。Seamパッケージに付属の例を見ることができます。バッキングビーンスコープをセッションから会話に変更し、ページパラメーターを使用する必要があります。また、Seam in Action Bookは、このユースケースを非常に素晴らしく簡単な例で説明しています。

を見てみましょう myfacesオーケストラ.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top