アプリ版:「スタンプのみでお礼する」機能のリリースについて

setAttribute(String, int)は適用できない

今、servletでセッションの勉強をしています。
ある本に載っているソースコードをそのままコピーしたんですが、

「HttpSessionのメソッド setAttribute(String, Object)は(String, int)に適用できません。」

…というエラーが出て動きません。
こういう場合、実行するにはどうしたら良いのでしょうか?
アクセスした回数をカウントすることなんてよくあると思うんです。
intも(Stringなんかも)Objectの下に含まれてるんじゃないんですか?
intでも良い気がするんですけど…。
一応、ソースコードを貼っておきます:

### Sample229TestServlet.java ###
package com.tips;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class Sample228TestServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;

private int count = 0;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=Shift_JIS");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
session.setAttribute("param",count++); //問題の箇所
out.println("<html><head><title>Sample228</title></head><body>");
out.println("<h2>SessionAttributeListenerの例</h2>");
out.println("sessionの属性countが" + count + "に変化しました。");
out.println("</body></html>");
out.close();
}
}

### Sample228.java ###
package com.tips;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;

public class Sample228 implements HttpSessionAttributeListener {

public void attributeAdded(HttpSessionBindingEvent event) {
}

public void attributeRemoved(HttpSessionBindingEvent event) {
}

public void attributeReplaced(HttpSessionBindingEvent event) {
ServletContext app = (event.getSession()).getServletContext();
app.log(">> Sample228 Listener detects attribute changed.");
}

}

…必要であれば補足します。では、宜しくお願いします。

A 回答 (1件)

int はプリミティブ型なので、Objectクラスのサブクラスにはあたりません。



> session.setAttribute("param",count++); //問題の箇所
の部分は、ラッパークラスを使用して、
session.setAttribute("param", new Integer(count++));
等としておくと、コンパイルできるんじゃないかな。
    • good
    • 1
この回答へのお礼

仰る通りnew Integer(count++)にしたら、コンパイルできました!
ラッパークラスとかまだよく分からないですけどこれから勉強します。
ありがとうございました!

お礼日時:2010/04/09 20:21

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