2010-12-06 13 views
1

ウェブページに2つのリンクがあり、appserver /?dept = 1にリンクしています。リンク2はappserver /?dept = 2です。次に、私はJSFのフェーズ・リスナーを持っています。バック・エンドのBeanを取得し、dept1またはdept2をBeanパラメーターとして設定して、異なる部門の内容をレンダリングすることができます。ユーザーが上のWebページから2つのウィンドウを開始すると、dept1ウィンドウの内容はdept2ウィンドウに移動できます。すべてがうんざり。 (注意:ブラウザをデスクトップのショートカットから起動する場合は、上記のリンクを入力してください。2セッションが作成され、2つの異なるバックエンドBeanインスタンスが作成されるため、問題はありません)。JSF 1.xでビュースコープBeanを作成する方法は?

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

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

私はシーム変換を試してみましたが、JSF2.0にはビュースコープのCDOがありません。それは助けることができますか?まださまざまな理由でJSF2.0に移行することはできません。 JAVA6、Tomcat6.20、Icefacesを使用しています。どんな助けも充当されます。

答えて

1

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

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

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

+0

ありがとうございました。私は試してみます。また、私は別のURL(1つのアプリケーションサーバーは各部門ごとに異なるサーブレットを持っている)を使用するようにリンクページを変更することができるかもしれないと思っていた。しかし、ユーザーが同じ部門に対して複数のウィンドウを開くと、そこに問題が残っている可能性があります。 – Charles

+0

BalusC、ご提案があります。そして、私はこれが最も非侵入型で最も簡単な解決策だと思います。私は1時間でそれを稼働させた。他の人のための経験を共有するだけです。1. Beanスコープをリクエストとして定義する必要があります。 2.ビーンコードをシリアライズ可能にします。私はcommon-el-1.0.jar common-fileupload-1.2.1 jar、ダウンロードしたTomahawk libのcommons-io-1.3.2.jar tomahawk12-1.1.10.jarを使用しました。 – Charles

+0

ようこそ。最も役立つ回答を受け入れることを忘れないでください。 http://stackoverflow.com/faqも参照してください。 – BalusC

0

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

+0

はい、私もそうだと思っていました。私はシームダウンロードの例を試しましたが、Jboss plubinなしでプレーンなTomcatで実行できる例は1つだけです。しかし問題はまだそこにある。私はpages.xml、注釈(@converstionスコープ、@Beginなど)のようなヘルプを追加しました。あなたが言及したように、私は "実践の継ぎ目"の本の例を探します。ありがとう。 – Charles

0

MyFaces Orchestraをご覧ください。

+0

はい。しかしオーケストラでは、組織として、まだ使用していないSpringをインストールする必要があります。 – Charles

関連する問題