はじめに
今回はフォームを使った送信と、それに関連して必要となってくるさまざまなデータのやり取りの方法について説明します。フォームの送信は、テキストだけでなくチェックボックスやラジオボタン、選択リストなどさまざまなものがあります。また、必要なデータを他のページに渡したり、JSPから他のページへ移動する方法なども考える必要があるでしょう。
過去の記事
対象読者
- Javaの基本(文法全般および基本的なクラスライブラリの使い方程度)をマスターしている人。
- サーバサイド(JSP、サーブレット)について基礎から勉強したい人。
- Eclipse WTPを使った開発に興味がある人。
チェックボックスとラジオボタン
前回、作成したサンプルは、「入力フィールドにテキストを書いて自分自身に送る」というものでした。フォームでは、テキストの他にもさまざまな形でデータを送信します。チェックボックスやラジオボタン、一覧リストなど、HTMLのフォームにはいくつものGUI用部品が用意されていますね。
これらを扱う場合、つい「チェックボックスは真偽値だろうか?」などと余計なことを考えてしまいがちです。が、はっきり言ってしまえば、Webのフォームから送られるデータは、「テキスト」だけです。それ以外の値が送られることはありません。基本的にHTTPで送受されるデータというのは、どんなものであれ「すべてテキストとして送られる」と考えましょう。
では、チェックボックスとラジオボタンは、どのような値が渡されるのでしょうか。整理すると次のようになります。
- どちらも、未選択(どれもチェックされていない)なら、
getParameter
で得られる値はnullになる。 - チェックボックスの場合、チェックされていたらvalueが送られる。
- ラジオボタンの場合、選択されている項目のvalueが送られる。
要するに、getParameter
で値を調べ、nullならば未選択を示す。nullでなければ選択された項目のvalueが得られる、というわけです。では、実際に簡単な例を作成してみましょう。
<%@ page language="java" contentType="text/html; charset=windows-31j" pageEncoding="windows-31j"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-31j"> <title>JSP SAMPLE</title> </head> <body> <% request.setCharacterEncoding("windows-31j"); out.println("※あなたが送信した内容<br>"); String chk = request.getParameter("check1"); String chk2 = chk == null ? "(check:未送信)" : chk; out.println("<font color=#FF0000>check:" + chk2 + "</font>"); String radio = request.getParameter("radio1"); radio = radio == null ? "(radio:未送信)" : radio; out.println("<font color=#FF0000>radio:" + radio + "</font>"); %> <form method="post" action="./index.jsp"> <label> <input type="checkbox" name="check1" value="check1" <%=chk != null ? "checked" : "" %>>チェックボックス </label> <br> <label> <input type="radio" name="radio1" value="Windows" <%=radio.equals("Windows") ? "checked" : "" %>>Windows </label> <label> <input type="radio" name="radio1" value="Linux" <%=radio.equals("Linux") ? "checked" : "" %>>Linux </label> <label> <input type="radio" name="radio1" value="Mac OS" <%=radio.equals("Mac OS") ? "checked" : "" %>>Mac OS </label> <input type="submit"> </form> </body> </html>
前回作成した「index.jsp」をそのまま書き換えて動かしてみてください。チェックボックスとラジオボタンの値が送られ表示されるのが分かるはずです。
これらのコントロールを使う場合、注意すべきは得られる値よりも「値の再現」の方法です。入力フィールドなどの場合はvalueに値を書き出せば送信した値が初期状態で表示されました。ですが、チェックボックスやラジオボタンの場合にはこれは使えません。これらの部品の場合、タグにchecked
という属性が追加されている項目が選択された状態として表示されます。そこで、チェックボックスの場合には、
<%=chk != null ? "checked" : "" %>
このようにして値がnullでなければ「checked」を出力すればよいでしょう。またラジオボタンの場合は、
<%=radio.equals("Windows") ? "checked" : "" %>
このようにして、変数に保管してある値がそのラジオボタンのvalueと同じかどうかをチェックし、同じならば「checked」を出力するようにしておきます。これを各ラジオボタンに用意しておけば、選択された項目だけONになって表示されます。