- PR -

Session変数のフィールド

1
投稿者投稿内容
Takaishi
常連さん
会議室デビュー日: 2004/10/11
投稿数: 24
投稿日時: 2004-10-11 15:35
ServletとJSP間のセッション変数について教えてください。
現在、以下のような処理を行おうとしています。
(1)Servletのヘルパークラス(Help.java)でJavaクラス(Hakobiya.java)を生成
(2)Hakobiya.javaをHttpSessionに格納
(3)Hakobiya.javaのHashMapフィールドinfoにFormBean.javaをput
(4)Help.javaからJSPへRequestDispatcherでforward()
(5)JSP側でsessionからHakobiyaを取得し、HakobiyaのメソッドでFormBeanを取得

このとき、JSP側で取得したHakobiyaのフィールドinfoがnullになってしまっていて
Help.java側で設定したFormBeanが取得できていません。
infoの参照先が別のインスタンスになってしまっているような気がするのですが、
同一のインスタンスを参照させるようにするにはどうすればいいのでしょうか?

参考までにセッション変数とそのフィールドはだいたい下の図のような関係です。

HttpSession --------------JSP
|
Hakobiya
|
info(HashMap)
|
FormBean

[ メッセージ編集済み 編集者: LIMITTAKER 編集日時 2004-10-11 15:38 ]
Takaishi
常連さん
会議室デビュー日: 2004/10/11
投稿数: 24
投稿日時: 2004-10-11 21:50
情報が不足しているかもしれないので、補足します。
環境:Windows XP Pro
Tomcat 4.1.30
J2SDK 1.4.2_05

(1)〜(4)Help.java内の処理
Hakobiya hk = new Hakobiya();
HttpSession session = request.getSession();
session.setAttribute("hakobiya", hk);
FormBean formBean = new FormBean();
hk.putForm("formBean", formBean);
RequestDispatcher rd = getServletContext().getRequestDispatcher("/hoge.jsp");
rd.forward();

(4)# Hakobiya.java内の処理
  HashMap info = new HashMap();
  public void putForm(Object key, Object value) {
    info.put(key, value);
  }
  public Object getForm(Object key) {
    return input.get(key);
  }

(5)hoge.jsp内の処理
  <jsp:useBean id="hakobiya" class="pckg.Hakobiya" scope="session" />
  <% FormBean formBean = (FormBean) hakobiya.getForm(); %>


----ここまで------
print文でデバッグしたところ、(1)〜(4)のところまではformBeanの値をsessionから
取得できています。
ところが(5)で取得しようとすると、hakobiyaはとれるものの
formBeanがnullになってしまっており、
hakobiyaのフィールドinfoも中身が空(nullではないです)になっています。

どこかまちがっていますでしょうか?
よろしくおねがいします。



[ メッセージ編集済み 編集者: LIMITTAKER 編集日時 2004-10-11 21:51 ]

[ メッセージ編集済み 編集者: LIMITTAKER 編集日時 2004-10-11 21:54 ]
おかもと
大ベテラン
会議室デビュー日: 2003/06/08
投稿数: 182
投稿日時: 2004-10-12 10:04
引用:

LIMITTAKERさんの書き込み (2004-10-11 21:50) より:
(5)hoge.jsp内の処理
  <jsp:useBean id="hakobiya" class="pckg.Hakobiya" scope="session" />
  <% FormBean formBean = (FormBean) hakobiya.getForm(); %>




上のgetFormで引数を渡さなければならないと思うのですが、
気のせいでしょうか?
Takaishi
常連さん
会議室デビュー日: 2004/10/11
投稿数: 24
投稿日時: 2004-10-13 09:15
引用:
--------------------------------------------------------------------------------


LIMITTAKERさんの書き込み (2004-10-11 21:50) より:
(5)hoge.jsp内の処理
  <jsp:useBean id="hakobiya" class="pckg.Hakobiya" scope="session" />
  <% FormBean formBean = (FormBean) hakobiya.getForm(); %>


--------------------------------------------------------------------------------

上のgetFormで引数を渡さなければならないと思うのですが、
気のせいでしょうか?
-------------------------------------------------------------------------------

ありがとうございます。
上のコードは処理のイメージで、手順を示す目的で記述しました。
実際のソース中には、ご指摘の引数は記述されていたのですが、
<jsp:useBean>タグのidが設定した値と違っておりました。
つまらないケアレスミスですが、
おかもとさんのご指摘がヒントになって、ようやく気づきました。
ありがとうございました。
1

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