- - PR -
JSFで、JSP上のHttpSessionのIDをmanaged-beanのプロパティに挿入するには?
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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を取得する方法でも構いません。) どなたか、よろしくお願いします。 | ||||
|
投稿日時: 2006-07-14 15:15
「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 ] | ||||
|
投稿日時: 2006-07-14 17:53
よしだ様
ご返答ありがとうございました。 ビーン上でご教授いただいた処理を実行し、セッションIDを取得することが出来ました。 また、JSFのライフサイクルのお話、 JSPからmanaged-beanに設定できない件もよく理解できました。 今後も勉強していきたいと思います。 ありがとうございました。 |
1