読者です 読者をやめる 読者になる 読者になる

感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

JSTLとは何か?JSTLを使ったサンプル。

<スポンサーリンク>

JSTLとは

JSTLとは、JavaServer Pages Standard Tag Libraryの略。
JSTLは、JSPで利用される標準的なカスタムタグをまとめたもの。

JSTLを使ってドロップダウンリストを作成する

JSTLを使う準備の部分。
JSPの先頭部分の書き方。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
・・・

ここで

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

と書くことによって、インターネット上のJSTLを使うことができる。
これを消すと正しく動作しない。

prefix属性は、JSPページ内でタグライブラリを使う場合の接頭辞(プレフィックス)を指定する。
指定する値は任意だが、JSTLのCoreタグでは慣習的にcを利用する。

次に、年月日時刻をoptionタグでJSTLを使って出力する例。
この部分は、「作ればわかる!」のコードをまるまる引用させていただいております。

<form action="/index" method="post">
<h1>JSTLを使ってみる</h1>
メールアドレスと、通知の時間を設定してください
<dl>
<dd>
<!-- 年 -->
<select name="year">
<c:forEach begin="0" end="3" var="i">
<option <c:if test="${i + currentYear == year }">selected</c:if>>
<c:out value="${i + currentYear}" /></option>
</c:forEach>
</select><!-- 月 -->
<select name="month">
<c:forEach begin="0" end="11" var="i">
<option <c:if test="${i == month }">selected</c:if>>
<c:out value="${i + 1}" /></option>
</c:forEach>
</select><!-- 日 -->
<select name="date">
<c:forEach begin="1" end="31" var="i">
<option <c:if test="${i == date }">selected</c:if>>
<c:out value="${i}" /></option>
</c:forEach>
</select><!-- 時間 -->
<select name="hourOfDay">
<c:forEach begin="0" end="23" var="i">
<option <c:if test="${i == hourOfDay }">selected</c:if>>
<c:out value="${i}" /></option>
</c:forEach>
</select><!-- 分 -->
<select name="minute">
<c:forEach begin="0" end="59" step="5" var="i">
<option <c:if test="${i == minute }">selected</c:if>>
<c:out value="${i}" /></option>
</c:forEach>
</select></dd>
</dl>
<input type="submit" value="送信"/>
</form>

まず、タグの説明。
ifタグは条件によって、子要素を評価するかしないかを決めるタグ。

<c:if test="${i == month }">selected</c:if>

というのは、i == monthかどうかの結果(true,false)を判定する。
ここでは、iがmonthだったら、optionをselectedにする。

つまり、month変数の値をデフォルトで選択されるようにしている。

<c:forEach begin="0" end="59" step="5" var="i">
<option <c:if test="${i == minute }">selected</c:if>>
<c:out value="${i}" /></option>
</c:forEach>

forEachタグはループを行う。
beginが取り出す先頭要素のインデックス。最初は0。
endは取り出す最後のインデックス。省略した場合は最後の要素。
stepは1ループで進める要素数を示す。
varは取り出した要素を格納する変数の名前。ここではiを使っている。
つまり、0から59まで、5おきに取り出してiに格納している。

ちなみに、ここで見ているmonthとかyearは、以下のように、サーブレット側で、リクエストオブジェクトに保持している。

	protected void doGet(HttpServletRequest req, HttpServletResponse res)
					throws ServletException, IOException {
		Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("Asia/Tokyo"));

		req.setAttribute("currentYear", calendar.get(Calendar.YEAR));

		if (calendar.get(Calendar.HOUR_OF_DAY) >= 7) {
			calendar.add(Calendar.DATE, 1);
		}

		req.setAttribute("year", calendar.get(Calendar.YEAR));
		req.setAttribute("month",calendar.get(Calendar.MONTH));
		req.setAttribute("date", calendar.get(Calendar.DATE));
		req.setAttribute("hourOfDay", 7);
		req.setAttribute("minute", 0);

		RequestDispatcher dispatcher = getServletContext()
					.getRequestDispatcher("/WEB-INF/index.jsp");
		dispatcher.forward(req,res);
	}

このように使うことで、optionタグのドロップダウンリストを作成することができる。

勉強した本

作ればわかる!Google App Engine for Javaプログラミング

作ればわかる!Google App Engine for Javaプログラミング


とても内容が濃い!Webアプリを作るためのすごく良い勉強になる。
内容が濃くて、4章目をちゃんと終わらせるのに4時間くらいかかる笑

感謝のプログラミング

今回で感謝のプログラミングは【551時間目】
10000時間まで、あと【9449時間】
データストアの謎のエラーにはまって時間を食ってしまった・・・。