3

次の問題があります...

アプリケーションの環境:

JSF、Richfaces、a4J

次のシナリオがあることを検討してください。

  • ユーザーがシステムにログインする
  • ユーザーは、a4j コンポーネントを含む a4j フォームで構成される新しいページに移動し、ユーザーはフォームに入力しますが、送信しません。
  • ユーザーが新しいタブを開き、同じ URL を開き、新しいフォームに新しいデータを入力します。
  • ユーザーは最初のタブに戻り、情報を送信します (注: すべての Bean はセッション スコープで定義されます)。

結果:

送信された情報は、2 番目のタブからの情報ですが、最初のタブから送信された情報です。これは、Bean がセッション スコープとして定義されている限り期待されます。

問題:

リクエスト スコープの動作を取得する必要があります (つまり、Bean はセッション スコープとして定義されていますが、新しいタブを新しいリクエストとして処理します)。

ノート:

Bean スコープをリクエスト スコープとして定義すると、同じフォーム内の個々のコンポーネントからの部分的な Ajax レスポンスは、まだ送信されていないため、他のコンポーネントをリセットします。

助言がありますか ?

--

本当にありがとう

4

2 に答える 2

2

これは、Webアプリケーションでよく知られている問題です。

もちろん、より多くのカスタムコードを使用してこの問題を解決することもできますが、私の簡単な提案は、これを正確に解決するseamフレームワークを使用することです。

SeamはJSFのスーパーセットであり、conversation scopeあなたが望むことを正確に実行する新しいBeanを導入します。

Seamはリッチフェイスをネイティブにサポートしているため(どちらもJBoss / Redhatのプロジェクトです)、統合に関する問題は予想されません。

于 2009-02-03T17:54:26.183 に答える
0

Bean がセッション スコープ内にある必要がある理由は何ですか?

これが ajax 機能を取得するためだけの場合は、Bean をリクエストに変更し、a4j:keepAliveタグを使用できます。

a4j:keepAlive は、リクエスト スコープ Bean のライブ サイクルを拡張します。Bean インスタンスは、ajax リクエストのセッション スコープ内にあるかのように動作します。ユーザーが同じページを 2 つ開くと、2 つの異なる Bean インスタンスが使用されます。

于 2009-02-05T15:02:00.350 に答える