同じページのポストバック全体でリクエスト スコープ Bean を維持することは可能ですか?
一般的な問題は、Bean がリクエストの最後に破棄され、フォームの送信ごとに再作成されるためです。たとえば、動的に操作されたブール値disabled
がデフォルト値readonly
にrendered
リセットされ、フォームが意図したとおりに機能しなくなります。
同じページのポストバック全体でリクエスト スコープ Bean を維持することは可能ですか?
一般的な問題は、Bean がリクエストの最後に破棄され、フォームの送信ごとに再作成されるためです。たとえば、動的に操作されたブール値disabled
がデフォルト値readonly
にrendered
リセットされ、フォームが意図したとおりに機能しなくなります。
セッション スコープはオプションではないと仮定します。それ以外の場合、この質問はほとんど意味がありません。
Tomahawk<t:saveState>
を使用して実行できます。次の行をページのどこかに追加します。
<t:saveState value="#{bean}" />
RichFaces<a4j:keepAlive>
も同じことを行います。
<a4j:keepAlive beanName="#{bean}" />
または、余裕がある場合は、少なくとも JSF 2.x にアップグレードし、Bean をビュースコープに入れます。
@ManagedBean
@ViewScoped
public class Bean implements Serializable {
// ...
}
方法に関係なく、同じビューにポストバックして戻り続けるnull
かvoid
、アクションメソッドから戻ると、同じ Bean が存在します。
後で取得するために、Bean をアプリケーション スコープ内の Map などのどこかに保存しない限り、そうではありません。
セッションスコープにしないのはなぜですか?これが Session スコープの目的であるため、同じ Session 中の複数の Request が同じ状態になる可能性があります。