2

重複の可能性:
適切なBeanスコープを選択する方法は?

私はJSFプログラミングの初心者であり、Beanスコープについて説明する必要があります。私はすでにこの議論に関するすべての質問を読みましたが、それほど明確ではありません。リクエストの範囲がよくわかりません。私は次のことを理解しています。「これはデフォルトのスコープであり、基本的にBeanは単一のHTTPリクエスト全体で存続します。」

たとえば、フォームを使用してWebページを開くようにブラウザに要求するとします。リクエストを行うと、リクエストスコープBeanが作成され、ライフサイクルが開始され、応答のレンダリングフェーズの後、JavaBeanが破棄されます。次に、フォームに記入してボタンを押します。これにより、別のHTTPリクエストが開始されます。

同じコンテキストで、リクエストスコープBeanの代わりにビュースコープBeanがある場合、違いは何ですか?Beanインスタンスはいくつ作成されますか?これをデータテーブルで使用する方がよいのはなぜですか?

4

1 に答える 1

2

BalusCによってリンクされた投稿を含むすべてのソースが言うように、リクエストスコープは、リクエストがサーバーに到達してからしばらくすると存続し始め、レスポンスの最後のビットが返送された直後に破棄されます。

実際、フォームをポストバックすると、新しいリクエストが開始され、新しいリクエストスコープが開始されます。これは、リクエストスコープのすべてが再度作成されることを意味します。したがって、最初にレンダリングされてから1回ポストバックされるフォームの場合、2つのリクエストスコープのBeanが作成されます。

ビュースコープは、同じビュー(ページ)にポストバックする限り存続します。これは、と呼ばれる非表示のフォームパラメータによって機能しますjavax.faces.ViewState。これの値は、サーバーで状態の保存を使用する場合、ある種の論理マップへのエントリです。JSF実装が実際にこれをどのように解決するかは、ここではそれほど重要ではありません(ただし、ほとんどの場合、マップにすぎません)。

ポストバック後、JSFは、このパラメーターを使用して、まったく同じビュースコープのBeanを再度取得できるようになります。したがって、最初にレンダリングされてから1回ポストバックされるフォームの場合、1つのビュースコープのBeanが作成されます。

データテーブルの場合、ほとんどの場合、ビュースコープを使用する必要があります。その理由は、ポストバックの前後でデータを同じにしたいからです。データが100%静的である場合、および/またはポストバックがない場合(テーブルがフォームにない場合)、代わりにリクエストスコープを使用できます。

于 2012-11-26T17:15:36.273 に答える