CodeZine(コードジン)

特集ページ一覧

サーバサイドJava入門 フォームデータの取り扱いとページ遷移の基本

第3回 フォーム送信とデータのやり取り

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2007/06/13 14:00

WTPではじめるサーバサイドJava入門第3回です。今回は、フォームの送信と、それに伴うさまざまなデータのやり取りの方法について説明を行いましょう。

目次

はじめに

 今回はフォームを使った送信と、それに関連して必要となってくるさまざまなデータのやり取りの方法について説明します。フォームの送信は、テキストだけでなくチェックボックスやラジオボタン、選択リストなどさまざまなものがあります。また、必要なデータを他のページに渡したり、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になって表示されます。


  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 掌田 津耶乃(ショウダ ツヤノ)

    三文ライター&三流プログラマ。主にビギナーに向けたプログラミング関連の執筆を中心に活動している。 ※現在、入門ドキュメントサイト「libro」、カード型学習サイト「CARD.tuyano.com」を公開中。またGoogle+プロフィールはこちら。

バックナンバー

連載:WTPではじめるサーバサイドJava入門

もっと読む

All contents copyright © 2005-2020 Shoeisha Co., Ltd. All rights reserved. ver.1.5