画面遷移時の情報保持方式についての設計は悩ましいところですよね。
①SessionScopeだとメモリ圧迫の危険性をはらんでいるため使っていいものか?
利用に関しては、SessionScopedBeanの情報の精査(大きなオブジェクトを保持し無い)や、破棄ライフサイクルの管理がきちんと設計できれば、利用に関して問題無いと思います。
今まで関わったシステムで、認証情報(ログインユーザや権限情報)はSessionScopedで保持することが多いです。
②SessionScopeをメモリ上から解放することはできるのか?
@SessionScopedなbeanにHttpSessionを@Injectして保持し、beanのメソッドにてHttpSession#invalidate()を実行することで破棄できるかと思います。(end()メソッドを実装しておく等)
@SessionScopedなbeanで@PreDestroyをつけたメソッドでロギングしておくと、破棄タイミングを把握できるかと思います。
③SessionScope以外のスコープを使ったほうが良いのか?例えば、フロー、カンバセーションなど
どちらも調査のみで実際に利用したことは無いのですが、下記ページを読むとFacesFlowやConversationScopeとSessionScopedの違いがわかるかと思います。
どちらもライフサイクル(そのBeanの有効期限、範囲)を明確に定義することで、SessionScopedよりも短い範囲でBeanを共有できることでメモリ圧迫を低減させる方法ですね。
ショッピングサイトなどで商品を選択してから、カート画面、決済画面、決済完了画面までを一連のフローとして扱う、といったケースで使いやすそうです。
本題ですが、一覧画面から詳細画面への値引き渡しは他にも下記の方法が採用できるかと思います。
- GETパラメータでの引き渡し
- POSTパラメータでの引き渡し
情報量が少なく、URLに表示されても問題無い情報を引き渡す場合、GETパラメータでの引き渡しを利用することが多いです。
GETパラメータで引渡すことにより、詳細画面をブックマークして利用することができます。
(これは利用要件によりメリットとなる場合とならない場合がありますが)
引渡す情報は一時的で、GETパラメータを利用したく無い場合であればPOSTパラメータの利用もオススメです。サーバメモリへの懸念をしなくて済むようになります。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/09/25 02:34