- ベストアンサー
サーブレット 選択されたチェックボックスの表示について
こんにちわ。 独学でサーブレットの勉強をしています。 チェックボックスで、どのチェックボックスをを選択したかを表示したいのですが、ネットや参考書を見てもよくわかりません。 イメージとしては、 □A □B □C □D □E とあってBを選択したら、ブラウザに 選択結果 B 2番目がチェックされました。 こんな感じで表示させたいです。 自分ではBの部分までは表示させうことができました。 よろしければ、アドバイスをお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
リクエストパラメータは1つのものに対して1つしか送信することができないので、質問にあるように"B"と"2番目"の2つを同時にServletに送信することはできません。 そこで少し変則的なやり方になりますが、 <input type="checkbox" name="check" value="A,1">A <input type="checkbox" name="check" value="B,2">B <input type="checkbox" name="check" value="C,3">C <input type="checkbox" name="check" value="D,4">D <input type="checkbox" name="check" value="E,5">E 上記のようにHTMLで<input ... value="A,1">とカンマ区切り等で送信したいパラメータを書いておき、それをServlet側で処理することになります。 Servlet側の処理は下記のような感じになります。doPost()メソッドの部分だけ書いておきますね。 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Vector<String> checkValues = new Vector<String>(); // チェックボックスの値を保持する Vector<String> checkNo = new Vector<String>(); // チェックボックスの番号を保持する // リクエストパラメータ(パラメータ名:check)の取得 String[] values = req.getParameterValues("check"); // パラメータ名:checkの各パラメータ値に対して for (int i = 0; i < values.length; i++) { String value = values[i]; String[] tmp = value.split(","); // パラメータ値を","で分割 checkValues.add(tmp[0]); checkNo.add(tmp[1]); } // HTML出力処理 resp.setContentType("text/html;charset=UTF-8"); PrintWriter out = resp.getWriter(); out.println("<html>"); out.println("<body>"); out.println("<h1>選択結果</h1>"); if (checkValues.isEmpty()) { out.println("<p>何も選択されませんでした。</p>"); } else { for (int i = 0; i < checkValues.size(); i++) { out.println("<p>" + checkValues.get(i) + "<br>"); out.println(checkNo.get(i) + "番目が選択されました。</p>"); } } out.println("</body>"); out.println("</html>"); } } これはあくまで「変則的」なやり方なので悪しからず・・・。
その他の回答 (1)
- x_jouet_x
- ベストアンサー率68% (162/236)
いくつか質問です。 ・チェックボックスを表示するHTMLもServletで出力していますか? ・Bの部分まで表示できたということは「2番目がチェックされました。」を表示したいのですか? ・チェックボックスの場合、複数選択可だと思いますがそれも考慮に入れますか?
補足
回答ありがとうございます。 チェックボックスはjspで作成しました。 作成したいのは「2番目がチェックされました。」の部分です。 複数選択された場合は、選択されたものすべてに対して同じ処理をするつもりです。 あと、ラジオボックスについても同様の処理をしたいと考えています。
お礼
回答ありがとうございます。 お礼が遅れて、申し訳ございません。 丁寧な説明をしていただき、ありがとうございます。 回答いただいた内容とても参考になりました。