• ベストアンサー

再:助けてください

pcbeginnerの回答

回答No.4

なんとなーく追ってみました。 ボタン押したら、入力された数字をリクエストかセッションに格納しないとダメじゃない?

Lhaca
質問者

お礼

そうですよね。次に進むには格納しなきゃいけないんですが、それが分からないんですよ。sessionを良く見直します。ありがとうございます。

関連するQ&A

  • セッションオブジェクトにリンクするプログラムです。

    どこが間違ってますか? コンパイルできないんです。。。 セッションオブジェクトを使って カウンタを作り、リンクからカウンタの値を 変更できるようにしているつもりです。 SessionCount.java <前略> HttpSession session = req.getSession(); Integer count; count = (Integer)session.getAttribute("count"); if (count == null){ count = new Integer(1); }else{ count = new Integer(count.intValue() + 1); } session.setAttribute("count", count); out.println("<html>"); out.println("<head><title>Session Test</title></head>"); out.println("<body>"); out.println("Count = " + count.intValue());//確認用 out.println("<A HREF = "URL/SessionCount" onClick = "count=count+1">続行</A>"); out.println("<A HREF = "URL/SessionCount" onClick ="count=0">リセット</A>"); <後略>

    • ベストアンサー
    • Java
  • コンパイルエラー

    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 というメッセージがでます。何が原因なのか教えてください。

  • テキストフィールドに何も入れない場合の動作について

    現在サーブレットについて勉強しているものです。 身近に聞ける人がおらず、お手数ですがご教授願います。 分からないところは、JSPでテキストフィールドがあるページを作成し、そこに何も入れないまま送信した場合の動作についてです。 以下に載せているサンプルAの通りに作成し、何も入れないで送信したところ、if( (numberStr == null) || (numberStr.length() == 0) )の条件文の中の処理が走るようで、”何かいれて”というメッセージが表示されるのを確認しております。 しかし、私が作成したファイルを使い、テキストフィールドに何も入れないまま送信した場合はエクセプション画面(例外レポート)に飛んでしまいます。 同じ条件を使い、同じように表示させているつもりなのですが、私が作成したソースが上手くいかず、参考書のソースが上手く動作している理由がどうしてもわかりません。 恐らくソースを見た方が早い、という方が多いと思いますので、見栄えは悪いのですが、ソースを張らせていただきます。 また、入力文字数の制限より、import等は全て削除しました。 また、何も入力しない場合に用いられている、try、catchの必要性についても、いまいち分かりません。 ifとelseで全て網羅するようにせず、なぜtry,catchを使うのでしょうか? ご存じの方、いらっしゃいましたら、是非教えて下さい。 サンプルA-start--------------------------------------------------------------------- public class GuessServlet extends HttpServlet { /* 当たりの数字をランダムに決定 */ private int hit = new Random().nextInt(10); public void doGet( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /* jspファイルで入力した数字をひっぱってくる */ String numberStr = request.getParameter("number"); int input = Integer.parseInt(numberStr); response.setContentType("text/plain; charset=Windows-31J"); PrintWriter out = response.getWriter(); if( (numberStr == null) || (numberStr.length() == 0) ) { request.setAttribute("msg","何か入れて"); RequestDispatcher dispatcher = request.getRequestDispatcher("/reqattr/guess.jsp"); dispatcher.forward( request, response); } else if(hit == input) { request.setAttribute("msg","当たり。数字=" + input); RequestDispatcher dispatcher = request.getRequestDispatcher("/reqattr/guess_hit.jsp"); dispatcher.forward( request, response); } else{ request.setAttribute("msg","はずれ。数字=" + input); RequestDispatcher dispatcher = request.getRequestDispatcher("/reqattr/guess.jsp"); dispatcher.forward( request, response); } } } サンプルA-end--------------------------------------------------------------------- 私のソース-start--------------------------------------------------------------------- public class GuessServlet extends HttpServlet { /* 当たりの数字をランダムに決定 */ private int hit = new Random().nextInt(10); public void doGet( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /* jspファイルで入力した数字をひっぱってくる */ String numberStr = request.getParameter("number"); String error = null; int number = -1; if( (numberStr == null) || (numberStr.length() == 0) ) { error = "何か入れて"; } if(error == null) { try{ number = Integer.parseInt(numberStr); if(number < 0 || 9 < number) { error = "0~9を入れて"; } } catch(NumberFormatException e) { error ="数字を入れてください"; } } String path; if(error != null) { request.setAttribute("msg", error); path = "/reqattr/guess.jsp"; } else { if(hit == number) { request.setAttribute("msg","当たり。数字=" + number); path = "/reqattr/guess_hit.jsp"; } else { request.setAttribute("msg","はずれ。数字=" + number); path = "/reqattr/guess.jsp"; } } RequestDispatcher dispatcher = request.getRequestDispatcher(path); dispatcher.forward( request, response); } } 私のソース-end---------------------------------------------------------------------

    • ベストアンサー
    • Java
  • 数字を当てさせるゲームについて

    #include<stdio.h> #include<time.h> #include<stdlib.h> int main(void) { int limit=0; int no; /*当てさせる値*/ int num; /*入力する値*/ int max=9; srand(time(NULL)); no=rand()%1000; do{ printf("あと%d回入力できます。数字を入力してください。\n",max-limit); scanf("%d",&num); limit++; if(num>no) { printf("大きいです。\n"); } else if(num<no) { printf("小さいです。\n"); } }while(num!=no || limit<max) if(num==no) { printf("正解です。"); printf("%d回で当たりました。",limit); } else { printf("残念ながら不正解です。") } return 0; } これは、0以上999以下の整数を入力させて9回以内にランダムで 入力した値を当てさせるゲームです。 質問内容としては 当てさせる数字を「0以上999以下の数字」→「0以上999以下の3の倍数」に変更するにはどうすればよいかです。 よろしくお願いいたします。

  • application暗黙オブジェクトでのint型情報共有について

    application.setAttributeとapplication.getAttributeを使ってint型変数の値を共有したいと思っています。 String型だとうまくいくのですがint型だとうまくいかないのです。 下記の上のソースはString型でのソースです。これの String storedData = "JSPサンプル"; の部分をint型に変えたいと考えています。 下のソースはint型に変えたのですが, Object型からint型にキャスト変換できないようなエラーが出て動きませんでした。 int型の変数を方法をapplication.setAttributeで使う方法はどうすればいいのでしょう? ご存知のかたいらっしゃいましたら教えてください。よろしくお願いします。 ----------------------------------------------- <%@ page contentType="text/html;charset=Shift_JIS" %> <html> <head><title>Sample</title></head> <body> <% //applicationオブジェクトに保存 String storedData = "JSPサンプル"; application.setAttribute("appdata",storedData); //applicationオブジェクトから読み出し Object readData = application.getAttribute("appdata"); String readDataString=(String)readData; %> applicationオブジェクト保存データ:<b><%= readDataString %></b> </body> </html> ----------------------------------------------- <%@ page contentType="text/html;charset=Shift_JIS" %> <html> <head><title>Sample0</title></head> <body> <% int storedData = 10; application.setAttribute("appdata",storedData); //applicationオブジェクトから読み出し Object readData = application.getAttribute("appdata"); int readDataString=(int)readData; %> applicationオブジェクト保存データ:<b><%= read %></b> </body> </html>

    • ベストアンサー
    • Java
  • リフレクション

    Webアプリ上でリフレクションにてとあるクラスのメソッドを実行するサンプルを作成して 見たのですがうまく動きませんでした。最後のmethod.invoke()の処理にてExceptionが発生し、 java.lang.IllegalArgumentException: object is not an instance of declaring class と表示されてしまいます。 作成したサンプルは下記なのですがどこが原因かお分かりになりますでしょうか。 try { Class cls = Class.forName("dao.TestDao"); // 引数の型をセット Constructor constructor = cls.getDeclaredConstructor(HttpSession.class); constructor.setAccessible(true); // 引数を渡してオブジェクトを生成 Object obj = constructor.newInstance(session); Method method = cls.getDeclaredMethod("getDataDao", int.class); method.setAccessible(true); Object result = method.invoke(cls, new Integer(100)); } catch (Exception e) { e.printStackTrace(); } // このクラスのgetDataDao()をリフレクションにて実行 public class TestDao { HttpSession session = null; public TestDao(HttpSession session) { this.session = session; } public List<String> getDataDao(int iNo) { List<String> list = new ArrayList<String>(); list.add((String)session.getAttribute("1")); list.add((String)session.getAttribute("2")); list.add((String)session.getAttribute("3")); list.add((String)session.getAttribute("4")); list.add((String)session.getAttribute("5")); return list; } }

    • ベストアンサー
    • Java
  • for文を使った累乗の計算方法について

    質問させてください。 for文を使った累乗の計算プログラムを作っています。 数値はコマンドライン引数から取得し、0番目の数字を i番目の数字分累乗するというものです。 ソースを途中まで作成したのですが、0乗した場合のプログラムが よく分かりません。どなたか教えていただけないでしょうか? public class Mondai { public static void main(String[] args) { //変数の初期化 int k = 0; if ( 2 <= args.length && args.length < 3) { //コマンドライン引数の数だけ配列を用意する int[] num = new int[args.length]; //0,1番目のコマンドライン引数を整数に変換してnumに代入する num[0] = Integer.parseInt(args[0]); k = num[0]; k *= k; num[1] = Integer.parseInt(args[1]); //num[1]の掛け算をnum[1]回繰り返す for (int i = 0; i < num[1] -2; i++) { k *= num[0]; } System.out.println("\"" + num[0] +"の" + num[1] + "乗は"+ k + "\""); if(num[1] == 0) { System.out.println("\"" + num[0] +"の" + num[1] + "乗は1\""); } //args.length <= 1の条件の時 } else if(args.length <= 1) { System.out.println("引数が足りないため累乗の計算ができません。"); //指定された条件以外の時 } else { System.out.println("引数が多すぎるため累乗の計算ができません。"); } } }

    • ベストアンサー
    • Java
  • C言語 二分木探索

    今、int型の二分木にデータを追加する関数(引数は二分木へのポインタと追加する値、追加されたノードへのポインタを返す)をつくろうとしてます。 以前リストにデータを追加する関数をつくったのでそれを変更してつくろうとしているのですが途中までいってつまってしまいました。 つくりかたを教えてください。 よろしくお願いします! struct BinaryTreeNode{ int data; struct BinaryTreeNode *l_next; struct BinaryTreeNode *r_next; }; struct BinaryTree{ int node_num; struct BinaryTreeNode *root; }; BinaryTreeNode *BinaryTreeNodeAlloc(void) { BinaryTreeNode *node; node = (BinaryTreeNode *)malloc(sizeof(BinaryTreeNode)); if (node == NULL) { return (NULL); } node->l_next = NULL; node->r_next = NULL; return (node); } BinaryTreeNode *BinaryTreeDataAdd(BinaryTree *list, int x) { BinaryTreeNode *ptr; BinaryTreeNode *prev; BinaryTreeNode *new_node; ptr = list->root; prev = NULL; while (ptr) {       ←?? if (ptr->data < x) { prev = ptr; ptr = ptr->next; } else if (ptr->data == x) { return (NULL); } else { new_node = BinaryTreeNodeAlloc(); if (new_node == NULL) { exit (0);                ←?? } new_node->data = x; new_node->next = ptr; if (prev != NULL) { prev->next = new_node; } else { list->head = new_node; } list->node_num++; return (new_node); } } new_node = BinaryTreeNodeAlloc(); if (new_node == NULL) { exit (0); } new_node->data = x; new_node->r_next = NULL; new_node->l_next = NULL; if (prev != NULL) { prev->next = new_node; } else { list->head = new_node; } list->node_num++; return (new_node); }

  • struts2でのフィルターを使ったセッション管理

    はじめまして。 struts2,spring frameworkでソフトを作ってますが、セッション管理について質問があります。 1.ログイン画面で、ログイン後にセッションidを登録する。 session.setAttribute (USER_HANDLE, user); 2.他の画面に移動する時に、セッションid(user)が格納されているか確認する。格納されていない場合は、ログイン画面に戻る。 という処理をする場合、actionごとに HttpSession session = request.getSession (true); Object user = session.getAttribute (USER_HANDLE); if (user != null) { //処理1 return true; } else { //処理2 return false; } と記述すると手間がかかるので、下記の様なFilterでまとめて管理できないかと考えているのですが、こういう考え方は一般的なのでしょうか? public class TestAccessFilter implements Filter { public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) context.get(HTTP_REQUEST); HttpSession session = request.getSession (true); Object user = session.getAttribute (USER_HANDLE); if (user == null) { //処理1 return "login-success"; } else { //処理2 return "login"; } } actionごとにセッションidが格納されているか確認する代わりに、Filterでまとめて確認できないかということなのですが.... struts2でこういう書き方をして良いのかわからず困っています。 アドバイスをお願いいたします。

    • ベストアンサー
    • Java
  • java while文です。教えてください(__)

    public class mondai2{ //プログラム開始 public static void main(String args[]){ BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); int i; int ans=0; int seikai=0; for(i=0;i<5;i++){ try{ { Random ran = new Random(); int num1 = ran.nextInt(8)+1; int num2 = ran.nextInt(8)+1; ans = num1*num2; System.out.print("問題"+(i+1)+":"); System.out.print(num1 + "×" +num2 + "="); String s =in.readLine(); seikai = Integer.parseInt(s); if(seikai==ans){ System.out.println("正解"); }else{ System.out.println("不正解"); } } }catch(IOException e){ System.out.println("エラー"); } } } } このプログラムをwhile文か、do while文にして正解が出るまで問題が出続けるようにしたいんですけど、まったくわからなくて困っています>< 教えてください(+o+)

    • ベストアンサー
    • Java