• ベストアンサー

セッションを使ったint型の値の保持

こんにちは。 少し文が長いですがよろしくお願いします。 AccessのDBから取得したint型の値を、セッションを使って保持したいのですが while(rs.next()){ String name = rs.getString("NAME"); int value = rs.getInt("VALUE"); HttpSession session1 = req.getSession(true); HttpSession session2 = req.getSession(true); session1.setAttribute("Name", name); session2.setAttribute("Value", value); dispatcher2.include(req, res); } のコードの session2.setAttribute("Value", value); でコンパイルエラー DBAccess.java [37:1] javax.servlet.ServletRequest の setAttribute(java.lang.String,java.lang.Object) は (java.lang.String,int) に適用できません。 がでてうまくいきません。 セッションを使ってint型の値の保持を行うにはどうすればよいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • mrt136
  • ベストアンサー率35% (33/92)
回答No.6

>java.lang.NullPointerException と言っていると言う事は、この場合、session.getAttribute("Value") で正しい 値が取得出来ていないと言う可能性があります。nullが返って来ているとか。。。 と、言う事は、setAttribute でちゃんと値をセット出来ていないか、セッションが切れちゃってるとか。。。 あ、それより、代入先の配列の宣言に問題があるとかは無いでしょうか? 配列は、ちゃんと、確保されていますか? 最初の補足欄では、配列の要素数を指定していませんでしたが。。。 可能性は、いろいろと考えられるので、ここでは、「これ!」と言う事は出来ません。 いろいろと調べてみて下さい。 原始的ですが、一行ごとに変数の値を表示する等してみれば、案外すぐにどれが問題なのかが 分かる場合が多いです。 >getValue()/putValue()は非推奨メソッドになりました。今のJ2EEでは通りません。 そうなんですか。。。 非推奨になっているんですか。。でも、非推奨だったら、通らないことは無いんじゃないですか? 推奨しないだけでは。。。? でも、使わないに越したことは無いって言うことですね。 訂正ありがとうございました。

amuro1980
質問者

お礼

ご指摘どおり配列の宣言に問題がありました。 配列の初期化をやっていなかったためうまくいかなかったみたいですね。 度重なる質問に回答をくださってありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (5)

noname#30871
noname#30871
回答No.5

 getValue()/putValue()は非推奨メソッドになりました。今のJ2EEでは通りません。

参考URL:
http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/http/HttpSession.html
すると、全ての回答が全文表示されます。
  • mrt136
  • ベストアンサー率35% (33/92)
回答No.4

すみません。。。適当なもので。。。 <% pa[count] = ((java.lang.Integer)(session.getAttribute("Value"))).intValue(); %> これでどうでしょう? 括弧が少なすぎました。。。 試してみて頂けますか?

amuro1980
質問者

補足

試してみたところ Apache Tomcat/4.0.3 - HTTP Status 500 - Internal Server Error type Exception report message Internal Server Error description The server encountered an internal error (Internal Server Error) that prevented it from fulfilling this request. exception java.lang.NullPointerException 内部サーバーエラーなるものがでてきました。 これはどういったエラーなのでしょうか。 プログラムの組み方によってよくでてくるのですが。

すると、全ての回答が全文表示されます。
  • mrt136
  • ベストアンサー率35% (33/92)
回答No.3

1行でするなら、 <% pa[count] = (java.lang.Integer)(session.getAttribute("Value")).intValue(); %> かな。 putValue() じゃ駄目ですか。。。 以前、私も同じ事をした様な気がするんですけど。。。

amuro1980
質問者

補足

修正したら この型は = には不適合です。 java.lang.Integer から int には変換できません。 pa[count] = (java.lang.Integer)(session.getAttribute("Value")).intValue(); メソッド intValue() は class java.lang.Object で見つかりません。 pa[count] = (java.lang.Integer)(session.getAttribute("Value")).intValue(); のサーバーエラーがでてきました。 なかなか難しいです。

すると、全ての回答が全文表示されます。
  • mrt136
  • ベストアンサー率35% (33/92)
回答No.2

setAttribute() じゃなくて、 session2.putValue("Value", value); とすれば出来るかも。。。 適当に回答しているので、間違っていたらすみません。

amuro1980
質問者

お礼

回答ありがとうございます。 試してみましたが残念ながら同じエラーがでてました。 やはりInteger型を引数としなければいけないみたいですね。

すると、全ての回答が全文表示されます。
  • ranx
  • ベストアンサー率24% (357/1463)
回答No.1

第2引数がObjectということは、参照型の引数を取るということなので、 intをInteger型に変換したら良いと思うのですが、不都合ですか?

amuro1980
質問者

補足

session.setAttribute("Value", new Integer(value)); に変更したらコンパイルは通りました。 その後JSPでその値をint型の配列に格納していきたいのですが <%! int pa[]; %> <%! int count = 0; %> <%= session.getAttribute("Name") %> <% pa[count] = session.getAttribute("Value"); %> <%= pa[count] %> <% ++count; %> のgetAttributeのところでサーバーエラー この型は = には不適合です。java.lang.Object から int には変換できません。 がでます。 Objectからintに変換する方法があったら教えてください。 お願いします。

すると、全ての回答が全文表示されます。

関連するQ&A