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

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

JSTLを使ってドロップダウンリストを作成する
JSTLを使う準備の部分。
JSPの先頭部分の書き方。

<pre><code>
<%@ 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>
・・・
</code></pre>

ここで

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
と書くことによって、インターネット上のJSTLを使うことができる。
これを消すと正しく動作しない。

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

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

<pre><code>
<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>
</code></pre>

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

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

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

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

<code>
<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>
</code>

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タグのドロップダウンリストを作成することができる。



お金があるかないかで人生の楽しさは全く変わってきます。

お金があっても幸せになれるとは限りませんが、お金がない人生は不幸です。

お金がなかった私が、転職して年収1000万を超えるまでにお世話になったブログを紹介します。

エンジニア転職のリアル

今の時代は、お金を稼げるかどうかは能力の有無よりも触れた情報の質によるものが大きいです。
ぜひ皆さんも良質な情報に触れて、お金持ちになって人生を充実させてください。