カスタムタグとJSTLについてまとめ

カスタムタグというのは、JSP内での処理をタグの形で定義し、処理できるようにしたものです。

コード
<%
if (i > 10) {
//
}
%>

みたいな処理を、

コード
<c:if test="${i > 10}">
10以上です
</c:if>

みたいに、再利用しやすくしたものがカスタムタグです。
JSPのコードが見やすくなり、Javaプログラマ以外にもJSPの作成が容易になります。

「カスタムタグ」はユーザーが独自に記述できるものですが、共通の処理はたくさんあります。
そこで、Javaの標準に近い位置付けでカスタムタグを利用できるようにしたのが、JSTLです。

JavaServer Pages Standard Tag Libraryの略です。
Standardとついていますね。

JSTLの使い方

以下の2つのJARファイルをダウンロードします。
・jstl-impl-1.2.jar
http://sourceforge.jp/projects/sfnet_hpclc/downloads/trunk/WebContent/WEB-INF/lib/jstl-impl-1.2.jar/

jstl-api-1.2.jar
http://sourceforge.jp/projects/sfnet_hpclc/downloads/trunk/WebContent/WEB-INF/lib/jstl-api-1.2.jar/

上記でダウンロードしたJARファイルを、WEB-INF/libディレクトリ以下に配置し、ビルドパスを通します。
これでJSTLを使う準備は完了です。

シンプルなサンプルを使ってみます。

コード
<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<title>JSTL</title>
</head>
<body>
<c:out value="Hello! JSTL!"/>
</body>
</html>

ブラウザでは以下のように表示されます。
f:id:sho322:20140517110312j:plain

ディレクトリ体系は以下のとおりです。
f:id:sho322:20140517110322j:plain

Coreタグの使い方

・スコープ変数に値をセットする

コード
<!-- スコープ変数に値をセットする -->
<c:set var="name" value="Yamada Tarou"/>

<!-- 表示する -->
${name}

スコープ変数が参照しているインスタンスのプロパティに値をセットする

Friendインスタンス(自作)をインスタンス化して、taglibでそのプロパティに値をセットしています。

コード
<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@page import="domain.*" %>
<html>
<head>
<title>JSTL</title>
</head>
<body>
<%
Friend friend = new Friend();
request.setAttribute("friend", friend);
%>
<c:set target="${friend}" property="name" value="sarumizu"/>
<!-- 表示する -->
<c:out value="${friend.name}"/>
</body>
</html>

使っているのは以下。

・domain.Friend

コード

package domain;
public class Friend {
	private String name;
	private int age;
	private float height;
	public String getName() {
	return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public float getHeight() {
		return height;
	}
	public void setHeight(float height) {
		this.height = height;
	}
}

画面には以下のように表示されます。
f:id:sho322:20140517110333j:plain

if文を作ってみる

JSTLでif文をつくるためには、ifタグを使います。

コード
<c:set var="age" value="19"/>
<c:if test="${age < 20 }">
20歳未満は禁止です。
</c:if>
ブラウザには「20歳未満は禁止です。」と表示されます

if~elseみたいな文を作る

JSTLでif~else文をつくるためには、chooseタグを使います。

コード
<c:set var="age" value="45"/>
<c:choose>
<c:when test="${age >= 40}">
おばちゃん
</c:when>
<c:when test="${age >= 20}">
成人
</c:when>
<c:otherwise>
おこちゃま
</c:otherwise>
</c:choose>
ブラウザには「おばちゃん」と表示されます。

コレクションをループする

JSTLを使ってListなどのコレクションをループさせるには、forEachタグを使う。

コード
<%
List list = new ArrayList();
list.add(new Friend("hanako"));
list.add(new Friend("momoko"));
list.add(new Friend("yukiko"));
request.setAttribute("list",list);
%>
<ul>
<c:forEach var="friend" items="${list}">
<li>${friend.name}</li>
</c:forEach>
</ul>

これはブラウザでは、

・hanako
・momoko
・yukiko
と表示される。

Mapを使う

MapのkeyとValueを表示してみます。

コード
<%
	Map map = new HashMap();
	map.put("football","Honda");
	map.put("baseball","Tanaka");
	map.put("basketball","Tabuse");
	request.setAttribute("map",map);
%>
<ul>
<c:forEach var="item" items="${map}">
	<li>
		${item.key}-${item.value}<br>
	</li>
</c:forEach>
</ul>
ブラウザでは以下のように表示されます。

・basketball-Tabuse
・football-Honda
・baseball-Tanaka



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

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

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

エンジニア転職のリアル

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