• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:setAttribute(String, int)は適用できない)

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

このQ&Aのポイント
  • セッションの勉強中にsetAttribute(String, int)が適用できないエラーが発生。
  • 回数をカウントするためのセッション属性を設定する必要がある。
  • ソースコードの一部を提供して、問題箇所を明示。

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

  • ベストアンサー
  • Yanch
  • ベストアンサー率50% (114/225)
回答No.1

int はプリミティブ型なので、Objectクラスのサブクラスにはあたりません。 > session.setAttribute("param",count++); //問題の箇所 の部分は、ラッパークラスを使用して、 session.setAttribute("param", new Integer(count++)); 等としておくと、コンパイルできるんじゃないかな。

futureworld
質問者

お礼

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

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

関連するQ&A

  • コンパイルエラー

    JBuiderでコンパイルしようとするとエラーがでてしまいます。ソースは以下の通りです。 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class TestServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); Integer count=(Integer)session.getAttribute("count"); if(count == null){  count = new Integer(0); }else{  count = new Integer(count.intValue()+1); } session.setAttribute("count",count); response.setContentType("text/html; charset=Shift_JIS"); PrintWriter out= response.getWriter(); out.println("<html>"); out.println("<head><title>TestServlet</title></head>"); out.println("<body>"); out.println(session.getId()); out.println("<p>\"count\"という名前のattribute = " + count +"</p>"); out.println("</body></html>"); out.close(); } } これをコンパイルすると、 "TestServlet.java": エラー #: 300 : メソッド getAttribute(java.lang.String) が見つかりません: インターフェース javax.servlet.http.HttpSession 行 9, 列 36 "TestServlet.java": エラー #: 300 : メソッド setAttribute(java.lang.String, java.lang.Integer) が見つかりません: インターフェース javax.servlet.http.HttpSession 行 15, 列 13 というメッセージがでます。何が原因なのか教えてください。

  • javaサーブレット sessionの使い方

    sessionを使ってデータの受け渡しをしたいのですが、ページ移動が増えると上手く受け渡せ無くて困っています。 jsp→Servlet のみでテストした時は正常に動いたのですが、ページを増やすと値が上手く更新されないのです。 下のプログラムではjspでセッションを開始して、ボタンを押すことでNS1.javaに移動し値を1増やしてNS2.javaに移動します。NS2.javaでも値を1増やしているので結果的に2つ値が増えるはずなのに1つも増えません。 何が悪いのでしょうか。解決策を教えて下さい。 // NStest.jsp <%@ page contentType="text/html;charset=Windows-31J" %> <html> <head> <title>移動</title> </head> <body> <% // isNewメソッドでセッション管理されているか確認します。 if (session.isNew()) { // セッション管理されていない場合、データを登録します。 session.setAttribute("count", 0); // 初回用メッセージ out.println(" Nice to meet you."); } else { // セッション管理されている場合、データを表示します。 out.println("count: " + session.getAttribute("count")); } %> <form method="POST" enctype="multipart/form-data" action="NS1"> <INPUT type="SUBMIT" name="button1" value="移動"> </form> </body> </html> // NS1.java package NStest; import java.io.*; import javax.servlet.*; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class NS1 extends HttpServlet { public void doPost (HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { // 出力形式等の設定 ServletContext context = this.getServletContext(); response.setContentType("text/html;charset=Windows-31J"); PrintWriter out = response.getWriter(); HttpSession session = request.getSession(false); String message; if (null == session) { // nullが返ってくる場合はセッションが作成されていない session.setAttribute("count", 0); out.println("セッションが開始されていません。"); } else { // セッションインスタンスからcountの値を取得して表示 // 1加算してふたたび保存 Integer count = (Integer)session.getAttribute("count"); session.setAttribute("count", 1 + count.intValue()); message = "ページカウント: " + count; out.println(message); } // 処理後はNS2.javaにリダイレクト response.sendRedirect("NS2.java"); } } // NS2.java package NStest; import java.io.*; import javax.servlet.*; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class NS2 extends HttpServlet { public void doPost (HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { // 出力形式等の設定 ServletContext context = this.getServletContext(); response.setContentType("text/html;charset=Windows-31J"); PrintWriter out = response.getWriter(); HttpSession session = request.getSession(false); String message; if (null == session) { // nullが返ってくる場合はセッションが作成されていない session.setAttribute("count", 0); out.println("セッションが開始されていません。"); } else { // セッションインスタンスからcountの値を取得して表示 // 1加算してふたたび保存 Integer count = (Integer)session.getAttribute("count"); session.setAttribute("count", 1 + count.intValue()); message = "ページカウント: " + count; out.println(message); } } }

    • ベストアンサー
    • Java
  • セッションを使った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型の値の保持を行うにはどうすればよいのでしょうか?

    • ベストアンサー
    • Java
  • ディスパッチャー処理の流れについて

    ************************** package dispa; import java.io.IOException; import javax.servlet.*; import javax.servlet.RequestDispatcher; import javax.servlet.http.*; public class Action extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException { int flag=0; request.setAttribute("error", "エラーです"); ServletContext sc = getServletContext(); if (flag == 1) { request.setAttribute("count","1"); RequestDispatcher disp = sc.getRequestDispatcher("/servlet/dispa.Login"); disp.forward(request,response); return; } // コンソールコメント1 ここから System.out.println("Action if文の外"); System.out.println(flag); // コンソールコメント1 ここまで RequestDispatcher disp = sc.getRequestDispatcher("/servlet/dispa.Entry"); disp.forward(request,response); // コンソールコメント3 ここから System.out.println("Action Dispatch処理終了ライン"); // コンソールコメント3 ここまで } } ************************** package dispa; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class Entry extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException { response.setContentType("text/html;charset=Shift_JIS"); PrintWriter out=response.getWriter(); String errorMSG = (String)request.getAttribute("error"); out.println(errorMSG); // コンソールコメント2 ここから System.out.println("Entry エラー"); // コンソールコメント2 ここまで } } ************************** package dispa; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class Login extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException { response.setContentType("text/html;charset=Shift_JIS"); PrintWriter out=response.getWriter(); String Logcount = (String)request.getAttribute("count"); out.println("Login"); // コンソールコメント4 Login ここから System.out.println("Login内"); // コンソールコメント4 Login ここまで if (Logcount.equals("1") ) { out.println("1回目のログインです"); return; } } } Action からスタート int flag=0 のときにはif文は実行されず コンソールコメント1 を表示 ディスパッチャーで Entry へ行き コンソールコメント2 を表示 その後 コンソールコメント3 を表示 [END] [質問1] なぜ、Entryサーブレットへ行ったとき、そこには return などの記述はないのに (元の)Actionへ戻るのか? -------------------------------- int flag=1 と可変して同じくAction からスタート flag=1 のときにはif文は実行され count を 1 にセット ディスパッチャーで Login へ行き コンソールコメント4 を表示 Logcount ←count にて 1なら 「1回目のログインです」 return [質問2] なぜ、Loginサーブレットへ行ったとき、そこに わざわざ return の記述をしてるのに (元の)Actionへ戻らないのか? この2つの質問です よろしくお願いします。

  • ディスパッチャー処理の流れについて

    ************************** package dispa; import java.io.IOException; import javax.servlet.*; import javax.servlet.RequestDispatcher; import javax.servlet.http.*; public class Action extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException { int flag=0; request.setAttribute("error", "エラーです"); ServletContext sc = getServletContext(); if (flag == 1) { request.setAttribute("count","1"); RequestDispatcher disp = sc.getRequestDispatcher("/servlet/dispa.Login"); disp.forward(request,response); return; } // コンソールコメント1 ここから System.out.println("Action if文の外"); System.out.println(flag); // コンソールコメント1 ここまで RequestDispatcher disp = sc.getRequestDispatcher("/servlet/dispa.Entry"); disp.forward(request,response); // コンソールコメント3 ここから System.out.println("Action Dispatch処理終了ライン"); // コンソールコメント3 ここまで } } ************************** package dispa; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class Entry extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException { response.setContentType("text/html;charset=Shift_JIS"); PrintWriter out=response.getWriter(); String errorMSG = (String)request.getAttribute("error"); out.println(errorMSG); // コンソールコメント2 ここから System.out.println("Entry エラー"); // コンソールコメント2 ここまで } } ************************** package dispa; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class Login extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException { response.setContentType("text/html;charset=Shift_JIS"); PrintWriter out=response.getWriter(); String Logcount = (String)request.getAttribute("count"); out.println("Login"); // コンソールコメント4 Login ここから System.out.println("Login内"); // コンソールコメント4 Login ここまで if (Logcount.equals("1") ) { out.println("1回目のログインです"); return; } } } Action からスタート int flag=0 のときにはif文は実行されず コンソールコメント1 を表示 ディスパッチャーで Entry へ行き コンソールコメント2 を表示 その後 コンソールコメント3 を表示 [END] [質問1] なぜ、Entryサーブレットへ行ったとき、そこには return などの記述はないのに (元の)Actionへ戻るのか? -------------------------------- int flag=1 と可変して同じくAction からスタート flag=1 のときにはif文は実行され count を 1 にセット ディスパッチャーで Login へ行き コンソールコメント4 を表示 Logcount ←count にて 1なら 「1回目のログインです」 return [質問2] なぜ、Loginサーブレットへ行ったとき、そこに わざわざ return の記述をしてるのに (元の)Actionへ戻らないのか? この2つの質問です。 同じディスパッチャーで飛ばして 到達先も同じvoid なのですが 片方は(Entry) returnなしでも戻り もう片方は(Login)は return を付けても戻らない??? よろしくお願いします。

  • intではなくStringで・・・

    こんなソースがあります。。 public class Check { public static void main(String[] args) { int i = Integer.parseInt(args[0]); if (i == 123) { System.out.println("あたり!"); } else if (i < 123) { System.out.println("はずれ!"); } else { System.out.println("おおはずれ!"); } } } これを、int型の文字を入力して判定させるのではなく、String型の文字で判定させたいのですが、 int i = Integer.parseInt(args[0]);をどう変えればいけるでしょうか? よろしくお願いします!

    • ベストアンサー
    • Java
  • javaservletの質問

    package test; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; @WebServlet(urlPatterns={"/test/Test2"}) public class Test2 extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(false); // セッションを取得(新しいセッションを作成しないようにする) if (session != null) { response.getWriter().write("yes, World!"); // クライアントにテキストを出力 } else { response.getWriter().write("no, World!"); // クライアントにテキストを出力 } } }sessionがある場合にはyesを、無い場合にはnoを出力したいのですが必ずyesになってしまいます。 HttpSession session = request.getSession(false); でsessionがない場合には作成しないようにしているはずなのになぜでしょうか

  • セッションタイムアウトになった時

    やりたいことは 1)セッション情報を取り出す 2)取り出した値を使ってDBに書き込みする 3)セッション情報を破棄する です。 http://oshiete1.watch.impress.co.jp/qa455453.html ほぼここの方と同じです。 ここの方はうまくいったようなのですが・・・ 初心者で悩んでいます。よろしくお願いいたします。 HttpSessionBindingListener セッションが切れた(valueUnbound)時 getAttribute("aaa")で "1111111"←ユーザーIDを取得したい。 req_.getSession().getAttribute("aaa");で取得できません。 よろしくお願いします。 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; /** セッション開始終了処理のテストサーブレット **/ public class SessionServlet extends HttpServlet implements HttpSessionBindingListener { HttpServletRequest req_; HttpServletResponse res_; public void valueBound(HttpSessionBindingEvent arg0) { System.out.println("valueBound"); } public void valueUnbound(HttpSessionBindingEvent arg0) { System.out.println(req_.getSession().getAttribute("aaa")); System.out.println("valueUnBound"); } public void service (HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { req_=req; res_=res; HttpSession session1 = req.getSession(); res.setContentType("text/html; charset=Shift_JIS"); req.setCharacterEncoding("Shift_JIS"); PrintWriter out = res.getWriter(); // パラメータの取得 String act = req.getParameter("act"); // ログイン処理 if (act == null) { // セッション変数の作成、設定 SessionServlet data = new SessionServlet(); session1.setAttribute("aaa", "1111111"); session1.setAttribute("data", data); // セッション開始画面の表示 out.println("<html><body>"); out.println("<h1>セッション開始</h1>"); out.println("<form method=\"POST\" action=\"SessionServlet?act=lo\">"); out.println("<input type=\"submit\" value=\"logout\">"); out.println("</form>"); out.println("</body></html>"); out.close(); // ログアウト処理 } else { // セッション終了画面の表示 out.println("<html><body>"); out.println("<h1>セッション終了</h1>"); out.println("</body></html>"); out.close(); // セッションの無効化 session1.invalidate(); } } }

  • setAttribute getAttribute 配列内容受け渡し  について 

    こんいちは。 setAttributeでセットした値をgetAttributeを使用して表示したいのですがうまくいきません。 あとsession.setAttributeとrequest.setAttributeの違いがわかりません。 session はなんとなくわかるのですが、requestがいまひとつわかりません。 どなたか教えていただけないでしょうか? よろしくお願いいたします。 下記がコーディングの内容です。 test.jsp <%@ page contentType="text/html;charset=Shift_JIS" import="java.sql.*, java.util.*" %> <% String[] desc={"aaa","bbb","ccc","ddd","eee"}; session.setAttribute("desc",desc); Vector vect = (Vector)session.getAttribute("dpt"); Iterator itr = vect.iterator(); while(itr.hasNext()) { String[] temp = (String[])itr.next(); out.println(temp[0]); out.println(temp[1]); } %> <html> <body> t_3 test </body> </html>

    • ベストアンサー
    • Java
  • 登録プログラムについて

    java初心者です。 以下のようなコーディングをしたのですが、エラーがでてcatchされているみたいで、データベースに登録されません。sessionのところがおかしいと思うのですが、わかる方どうか教えてください。logではException: nullと表示されています。 まずHtmlで入力処理してます。 つぎに tourokuAddServlet// package ltcinfo; import java.io.*; import javax.servlet.http.*; import javax.servlet.*; public class tourokuAddServlet extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { request.setCharacterEncoding("Windows-31J"); response.setContentType("text/html;charset=Windows-31J"); PrintWriter out=response.getWriter(); HttpSession session = request.getSession(true); tourokuBeans reco=new tourokuBeans(); reco.setgakusekino(Integer.parseInt(request.getParameter("gakusekino"))); reco.setpasswd(request.getParameter("passwd")); reco.setclassid(Integer.parseInt(request.getParameter("classid"))); session.setAttribute("reco", reco); ~省略(あとは確認画面の表示をしています)次にLTCInfoServlet//戻ると登録の選択処理 package ltcinfo; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class LTCInfoServlet extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { HttpSession session = request.getSession(true); tourokuBeans reco=(tourokuBeans)session.getAttribute("reco"); int check=Integer.parseInt(request.getParameter("check")); if (check==1){ reco.insert(); getServletContext().getRequestDispatcher("/tourokuReport.jsp") .forward(request, response); }else{ getServletContext().getRequestDispatcher("/touroku.html") .forward(request, response); } tourokuBeans// setとget文 public void insert(){ HttpSession session = request.getSession(true); tourokuBeans reco=(tourokuBeans)session.getAttribute("reco"); try{ Class.forName("org.gjt.mm.mysql.Driver"); String url="jdbc:mysql://localhost/sotsuken?useUnicode=true&characterEncodning=SJIS"; Connection con=DriverManager.getConnection(url,"root","root"); Statement stmt=con.createStatement(); int gakusekino = reco.getgakusekino(); String passwd = reco.getpasswd(); int classid=reco.getclassid(); String values = "(\'"+gakusekino+"\', \'"+passwd+"\', \'"+classid+"\', \'"+name+"\', \'"+mail+"\', \'"+keitel+"\', \'"+keimail+"\', \'"+touroku+"\')";   String sql = "insert into gakuseitbl values " + values; stmt.executeUpdate(sql); stmt.close(); con.close(); }catch(Exception ex) { System.out.println("Exception: " + ex.getMessage()); System.out.println("失敗"); } } }

昼夜逆転は悪い事?
このQ&Aのポイント
  • 昼夜逆転は悪いことなのか、不登校の中学三年生が悩んでいます。
  • 夜に寝ることが怖くて、夢を見るのも怖いです。
  • また、睡眠薬の効きが悪くなってきており、昼夜のリズムの乱れに悩んでいます。
回答を見る

専門家に質問してみよう