2009-07-16 3 views
0

私は、JSFバッキングBeanのスコープに関する誤解を持ちます。私はJSFを初めて使用していて、現在は単純なプロジェクトを作成しています。すべての豆は主にセッションスコープを持っています。しかし、私のサイトには多くのユーザーがいるため、セッションが非常に大きくなり、サーバーが停止することになります。解決策はリクエストスコープBeanです。しかし、例えば、私のページが検証されなければならない場合、検証が失敗してエラーメッセージが表示され、すべてのユーザー入力が保存されたら、どうすればいいですか? AJAXリクエストを使用するコンポーネントを使用しようとしていて、リクエストBeanが再構築されないことを期待していますが、これは機能しません(私は<rich:datascroller>を使用しています)。バッキングスコープはどのように機能しますか?

私はJSFの理解に大きな穴があると思います。この状況で何をすべきか説明したり、Beanスコープについての良い記事をリンクしてくれたら、感謝しています。

+0

ここではJSF2のターゲットを絞ったdupe:http://stackoverflow.com/questions/7031885/how-to-choose-the-right-bean-scope – BalusC

答えて

3

スコープはBeanの有効期間を定義します。

リクエストスコープBeanは、1つのHTTPリクエストの処理中に生きています。したがって、ユーザの入力を分析してレスポンスページを公式化する際に、両方のリクエストが利用できます。だから簡単な検証と応答のために、私はあなたが必要とするものにリクエストスコープのBeanを期待しています - おそらく、ブラウザにリダイレクトを送って新しいリクエストを提出した場合は例外です...

セッションスコープ付きBeanは、ユーザーのセッションの間、つまりセッション中に生きています。複数のリクエストにわたってセッションはしばらく続くかもしれませんが、最終的にユーザーはログアウトするか、または終了し、セッションがタイムアウトになります。だから、どれだけ多くのユーザーがいても、一度にアクティブなユーザーの数は関係ありません。各ユーザーのセッションデータ(少なくとも誰が誰か、おそらく最近見たものなど)を保持するのはかなり一般的です。データが保持されていることが心配される根本的な理由はありません。あなたはちょうどそれがきちんとした状態を保つようにする必要があります。古いページのデータを非常に長く保存しないでください。おそらくは "現在のデータ" beanなどです。

+0

しかし、AJAXリクエストでは、新しいBeanそれはそうです。この「単純な検証と応答」をどのように実行できますか? – aindl

+0

1回のAJAXリクエストのサービスについて話していますか?ページは既にレンダリングされています。元のページを描画する際に使用されたBeanとは関係なく、そのAjaxリクエスト/レスポンスで単一のリクエストスコープBeanが使用されると思います。今は多分もっと役立っている "有用な"フレームワークを使っているのでしょうか? – djna

+2

ページを取得すると、その要求がレンダリングされ、要求が返されます。次に、要求スコープBeanが投げられます。次に、新しいAJAXリクエストを実行して、必要なすべての新しいBeanをビルドし、レスポンスを送信します。そう、はい、AJAXリクエストは新しいRequestスコープBeanを作成します。彼らは、あと、AJAX *のリクエストです。 – Drew

関連する問題