- PR -

JSFで、JSP上のHttpSessionのIDをmanaged-beanのプロパティに挿入するには?

1
投稿者投稿内容
つちつち
会議室デビュー日: 2004/10/21
投稿数: 17
投稿日時: 2006-07-13 20:53
皆さま、こんにちは
初心者です。。よろしくお願いします。

JSFで、JSP上のHttpSessionのIDをmanaged-beanのプロパティに挿入方法を教えてください。

JSFのJSP上で、
 String sid = request.getSession().getId();
のように、HttpSessionのIDを取得し、managed-beanのプロパティにセットしたいと思っています。
managed-beanのsetter、setSessionID() 等をJSP上で使えるのでしょうか?

(※ちなみに、managed-bean側で該当セッションのHttpSessionのIDを取得する方法でも構いません。)

どなたか、よろしくお願いします。

よしだひろゆき
大ベテラン
会議室デビュー日: 2004/11/22
投稿数: 141
投稿日時: 2006-07-14 15:15
引用:
JSFのJSP上で、
 String sid = request.getSession().getId();
のように、HttpSessionのIDを取得し、managed-beanのプロパティにセットしたいと思っています。
managed-beanのsetter、setSessionID() 等をJSP上で使えるのでしょうか?
(※ちなみに、managed-bean側で該当セッションのHttpSessionのIDを取得する方法でも構いません。)


「JSP上で」というのがどういう意味なのかよくわかりませんが、とりあえず、プログラム中では以下で取れます。
HttpSession se = (HttpSession)FacesContext.getCurrentInstance().getExternalContext().getSession(false);
String id = se.getId();

これをビーンのgetterで処理すれば良いでしょう。

ちなみに、プログラムからmanaged-beanにアクセスする方法はいくつかあります。たとえば
FacesContext ctx = FacesContext.getCurrentInstance();
BeanType bean = (BeanType)ctx.getApplication().getVariableResolver().resolveVariable(ctx, "beanName");
ただ、これはビーンの名前をハードコーディングするのであまりお勧めしたくありません。

また、JSFのライフサイクルをよく理解しないといけませんが、JSP上にJavaのプログラムを書いた場合、それはnavigation ruleでそのJSPに遷移した後のレンダリングフェーズで評価されます。したがって、そのプログラムの結果の値を、JSFの標準的な方法でmanaged-beanに設定することはできません(モデル更新フェーズは終わっているから)。いったんクライアントに飛ばして、次のリクエストで戻してもらって、というようなことは考えられますがJavaScriptなどのテクニックが必要でしょう。

[ メッセージ編集済み 編集者: よしだひろゆき 編集日時 2006-07-14 15:17 ]
つちつち
会議室デビュー日: 2004/10/21
投稿数: 17
投稿日時: 2006-07-14 17:53
よしだ様
ご返答ありがとうございました。

ビーン上でご教授いただいた処理を実行し、セッションIDを取得することが出来ました。

また、JSFのライフサイクルのお話、
JSPからmanaged-beanに設定できない件もよく理解できました。
今後も勉強していきたいと思います。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)