カスタムタグというのは、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>
ブラウザでは以下のように表示されます。
ディレクトリ体系は以下のとおりです。
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;
}
}
画面には以下のように表示されます。
if文を作ってみる
JSTLでif文をつくるためには、ifタグを使います。
<c:set var="age" value="19"/>
<c:if test="${age < 20 }">
20歳未満は禁止です。
</c:if>
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万を超えるまでにお世話になったブログを紹介します。
エンジニア転職のリアル
今の時代は、お金を稼げるかどうかは能力の有無よりも触れた情報の質によるものが大きいです。
ぜひ皆さんも良質な情報に触れて、お金持ちになって人生を充実させてください。