JSP/Servlet | クライアントとサーバー間の値の受け渡し | フォーム送信
ユーザーから入力を受け取るなら、やはり基本は「フォーム送信」である。<form>タグによるフォームに情報を入れて送信し、その送信結果を受け取って処理する。HTMLの基本といえる機能である。
フォームから送信されたテキストはgetParameterを使って取得できる。次のような形である。
String 変数 = request.getParameter(名前);
これで、フォームに用意されたコントロールのうち、引数に指定した名前の項目の値を取得できる。注意すべき点は、「指定するのはIDではなく名前である」ということだ。<input id="hoge">のようにIDだけを指定しても値は取得できない。必ずname属性を指定する必要がある。
また、同じ名前(name)の項目が複数ある場合は、その値をまとめて取得できる。これにはgetParameterValuesというメソッドを使用する。
String[] 変数 = request.getParameterValues(名前);
このgetParameterValuesは、引数に指定されたnameの値をすべて集めてString配列を返す。たとえば、複数項目を選択できる<select>タグからすべての値を取得するときに使用される。
それでは例を作ってみよう。
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%
String inpt = request.getParameter("input");
inpt = inpt == null ? "" : inpt;
String chk = request.getParameter("check");
chk = chk == null ? "OFF" : "ON";
String rd = request.getParameter("radio");
rd = rd == null ? "" : rd;
String[] sels = request.getParameterValues("select");
String sel = "";
if (sels != null){
for(int i = 0;i < sels.length;i++)
sel += sels[i] + " ";
}
String str = "INPUT:" + inpt + "<br>" +
"CHECK: " + chk + "<br>" +
"RADIO: " + rd + "<br>" +
"SELECT:" + sel;
%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Sample jsp</title>
<style>
h1 {font-size:16pt; background:#AAFFAA; padding:5px; }
</style>
</head>
<body>
<h1>Sample jsp page</h1>
<p>このページはサンプルです。</p>
<p><%=str %></p>
<table>
<form method="post" action="hello.jsp">
<tr><td>入力</td><td>
<input type="text" id="input" name="input"></td></tr>
<tr><td></td><td>
<input type="checkbox" id="c1" name="check" value="Une">
<label for="c1">チェックボックス</label></td></tr>
<tr><td></td><td>
<input type="radio" name="radio" id="r1" value="first">
<label for="r1">ラジオボタン1</label><br>
<input type="radio" name="radio" id="r2" value="Second">
<label for="r2">ラジオボタン2</label></td></tr>
<tr><td></td><td>
<select id="select" name="select" multiple>
<option value="Eins">1番目</option>
<option value="Twei">2番目</option>
<option value="Drei">3番目</option>
</select></td></tr>
<tr><td></td><td>
<input type="submit" value="送信"></td></tr>
</form>
</table>
</body>
</html>
上の例は、フォームを自分自身のアドレスへ送信し、入力された情報も一緒に表示する例である。ここではhello.jspというファイル名で作成しているため、別のファイル名を使う場合は<form>タグのactionを修正する。
ここでは、送信されたフォームの情報、<select>以外の情報はgetParameterを使って取得している。
String inpt = request.getParameter("input");
String chk = request.getParameter("check");
String rd = request.getParameter("radio");
どれもnameで指定した名前を引数に指定していることがわかるだろう。少しややこしいのが<select>から取得する部分である。今回は複数項目を選択できるようになっている。
String[] sels = request.getParameterValues("select");
String sel = "";
if (sels != null){
for(int i = 0;i < sels.length;i++)
sel += sels[i] + " ";
}
まずgetParameterValuesでString配列を取得する。そして繰り返し処理で、配列から1つずつ値を取り出している。ここで値がまったくない場合、getParameterValuesはnullになり、for文はエラーになるため、nullでないことを確認してから実行するのを忘れないようにしよう。