補講:その他のフォームからデータをServletに渡す
セレクトボックスで選択されたデータを受け取る
入力フォームのセレクトボックスを使ってみます。
個々のユーザーが現在の天気を登録して全国の天気予報をするWebアプリケーションのプロトタイプのイメージです。
<!DOCTYPE html>
<html>
<head>
<title>select.html</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<p>今の天気を教えて下さい</p>
<form action="/03_JavaWebText/Weather1">
<p><select name = "weather">
<option value="晴れ">晴れ</option>
<option value="曇り">曇り</option>
<option value="雨">雨</option>
</select></p>
<button type="submit">送信</button>
</form>
</body>
</html>
- 上記フォームで送られるデータに付けられた名前は何ですか?
あなたの答え: |
- 「晴れ」を選んだときに送られるデータは何ですか?
あなたの答え: |
答えられなかった方はHTMLの「用途別のフォーム部品」を復習してください。
次にServletを用意します。
package p04;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(urlPatterns = {"/Weather"})
public class Weather extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String weather = request.getParameter("weather");
request.setAttribute("weather", weather);
request.getRequestDispatcher("04Form/weather.jsp").forward(request, response);
}
}
- String weather = request.getParameter("weather");では何をしていますか?
あなたの答え: |
- request.setAttribute("weather", weather);では何をしていますか?
あなたの答え: |
- request.getRequestDispatcher("04Form/weather.jsp").forward(request, response);では何をしていますか?
あなたの答え: |
最後にJSPです。
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>weather.jsp</title>
</head>
<body>
今は${weather}なんですね。
</body>
</html>
- 今は${weather}なんですね。では何をしていますか?
あなたの答え: |
ラジオボタンで選択されたデータを受け取る
入力フォームのラジオボタンを使ってみます。
セレクトボックスと同様に天気予報をするWebアプリケーションのプロトタイプを作成してみます。
<!DOCTYPE html>
<html>
<head>
<title>Form</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<p>今の天気を教えて下さい</p>
<form action="/03_JavaWebText/Weather">
晴れ<input type="radio" name="weather" value = "晴れ"/><br>
曇り<input type="radio" name="weather" value = "曇り"/><br>
雨<input type="radio" name="weather" value = "雨"/><br>
<button type="submit">送信</button>
</form>
</body>
</html>
ラジオボタンは排他的に単一の値だけを選択させるフォームでした。
- 単一選択を実現するために重要なことは何でしたか?
あなたの答え: |
- 例題1からServletとJSPに変更が必要な箇所はある(あった)と思いますか?
あなたの答え: |
ボタンを使って送られたデータを受け取る
ボタンを使ってデータを送ります。
作成するアプリは今までと同様ですからそろそろ慣れてきたのではないでしょうか?
<!DOCTYPE html>
<html>
<head>
<title>Form</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<p>今の天気を教えて下さい</p>
<form action="/03_JavaWebText/Weather1">
<input type="submit" name="weather" value="晴れ" >
<input type="submit" name="weather" value="曇り">
<input type="submit" name="weather" value="雨">
</form>
</body>
</html>
- 先の<radio.html>と違うところは何ですか?
あなたの答え: |
チェックボックスで選択された複数データを受け取る
チェックボックスを使うと複数の値が入力フォームからServletに渡る可能性があります。そのため、Servlet側では複数の値を文字列の配列として受け取ります。その点が今までのフォームとチェックボックスの違いです。具体的には以下のようにチェックボックス から渡されたデータはrequest.getParameterValuesメソッドを使って文字列配列に格納します。
String[] inquiries = request.getParameterValues("inquiry");
企業のお問い合わせのプロトタイプです。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>checkbox.html</title>
</head>
<body>
<p>お問い合わせフォーム</p>
<form action="${pageContext.request.contextPath}/CheckBox">
<p>お問い合わせ内容(複数選択可)</p>
<input type="checkbox" name="inquiry" value="サービスを利用したい" />サービスを利用したい
<input type="checkbox" name="inquiry" value="業務提携したい" /> 業務提携したい
<input type="checkbox" name="inquiry" value="取材したい" />取材したい
<p>当社を知ったきっかけ(複数選択可)</p>
<input type="checkbox" name="media" value="TVCM" />TVCM
<input type="checkbox" name="media" value="SNS" />SNS
<input type="checkbox" name="media" value="新聞広告" />新聞広告
<input type="submit" value="送信" />
</form>
</body>
</html>
</body>
</html>
Servletです。
package controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/CheckBox")
public class CheckBoxServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set request character encoding to UTF-8
request.setCharacterEncoding("UTF-8");
// Retrieve form data
String[] inquiries = request.getParameterValues("inquiry");
String[] media = request.getParameterValues("media");
// Print form data to standard output
System.out.println("お問い合わせ内容:");
if (inquiries != null) {
for (String str : inquiries) {
System.out.println(str);
}
} else {
System.out.println("なし");
}
System.out.println();
System.out.println("当社を知ったきっかけ:");
if (media != null) {
for (String str : media) {
System.out.println(str);
}
} else {
System.out.println("なし");
}
}
}
<入力の例>
<出力例>
お問い合わせ内容: サービスを利用したい 業務提携したい 取材したい 当社を知ったきっかけ: TVCM SNS 新聞広告 |
以上で、「補講:その他のフォームからデータをServletに渡す」を終わります。
最後までお読みいただきありがとうございました。
投稿者プロフィール
-
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。
最新の投稿
- 新人エンジニア研修講師2024年12月25日IT技術者の副業としての研修講師の魅力とは?
- 新人エンジニア研修講師2024年12月25日IT技術者の定年後のお仕事としての研修講師の魅力とは?
- 全ての社員2024年12月25日TOEICでよく出てくる意外な意味で使われる英単語 50連発
- 新人エンジニア研修講師2024年12月25日新人エンジニア研修使える「アイスブレイク集」 45連発