プロが教えるわが家の防犯対策術!

こんにちは。
少し文が長いですがよろしくお願いします。

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型の値の保持を行うにはどうすればよいのでしょうか?

A 回答 (6件)

>java.lang.NullPointerException



と言っていると言う事は、この場合、session.getAttribute("Value") で正しい
値が取得出来ていないと言う可能性があります。nullが返って来ているとか。。。
と、言う事は、setAttribute でちゃんと値をセット出来ていないか、セッションが切れちゃってるとか。。。

あ、それより、代入先の配列の宣言に問題があるとかは無いでしょうか?
配列は、ちゃんと、確保されていますか?
最初の補足欄では、配列の要素数を指定していませんでしたが。。。

可能性は、いろいろと考えられるので、ここでは、「これ!」と言う事は出来ません。
いろいろと調べてみて下さい。
原始的ですが、一行ごとに変数の値を表示する等してみれば、案外すぐにどれが問題なのかが
分かる場合が多いです。

>getValue()/putValue()は非推奨メソッドになりました。今のJ2EEでは通りません。
そうなんですか。。。
非推奨になっているんですか。。でも、非推奨だったら、通らないことは無いんじゃないですか?
推奨しないだけでは。。。?
でも、使わないに越したことは無いって言うことですね。
訂正ありがとうございました。
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/07/09 11:05

 getValue()/putValue()は非推奨メソッドになりました。

今のJ2EEでは通りません。

参考URL:http://java.sun.com/j2ee/sdk_1.3/techdocs/api/ja …
    • good
    • 0

すみません。

。。適当なもので。。。

<% pa[count] = ((java.lang.Integer)(session.getAttribute("Value"))).intValue(); %>

これでどうでしょう?
括弧が少なすぎました。。。
試してみて頂けますか?

この回答への補足

試してみたところ

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

内部サーバーエラーなるものがでてきました。
これはどういったエラーなのでしょうか。
プログラムの組み方によってよくでてくるのですが。

補足日時:2002/07/09 08:57
    • good
    • 0

1行でするなら、



<% pa[count] = (java.lang.Integer)(session.getAttribute("Value")).intValue(); %>

かな。

putValue() じゃ駄目ですか。。。
以前、私も同じ事をした様な気がするんですけど。。。

この回答への補足

修正したら

この型は = には不適合です。
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();

のサーバーエラーがでてきました。
なかなか難しいです。

補足日時:2002/07/08 18:02
    • good
    • 0

setAttribute() じゃなくて、



session2.putValue("Value", value);

とすれば出来るかも。。。
適当に回答しているので、間違っていたらすみません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/07/08 17:41

第2引数がObjectということは、参照型の引数を取るということなので、


intをInteger型に変換したら良いと思うのですが、不都合ですか?

この回答への補足

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に変換する方法があったら教えてください。
お願いします。

補足日時:2002/07/08 17:26
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています