はじめに
歴史長いJSPで描画を書く際にはJSTLを使うと便利です。
JSTLはJavaServer Pages Standard Tag Libraryです。
<% xxx %>を使うとJSPのフォーマットなどは階層きれいに整理できないため、メンテナンス性は悪いです。
複雑のJSPの場合は、JSPファイルを分割するほか、JSTLのcoreタグを利用して分岐、LOOPなどを分かりやすくしましょう。
EL式(Expression Langage)
EL式は${ ~ }タグを使用して記述します。
単純計算例:${100 + 200 * 30}, ${ "1" eq "1" ? "trueです" : "falseです"}
pageContext、request例:${user.userName}, ${count}
セッション例: ${sessionScope.user.userName}
初期パラメータ例:${initParam["param1"]}
クッキー例:${cookie["param1"].value}
ヘッダー例:${header['user-agent']}
よく使う比較の書き方
1、等しい: ${a eq b}
2、等しくない:${a ne b}
3、Not:${not a}
4、Empty:${empty a}
5、Not Empty:${not empty a}
6、より大きい:${a gt b}
7、より小さい:${a lt b}
8、以上:${a ge b}
9、以下:${a le b}
EL式で書く際には、必ずsetする必要があります。
NG例
String data = "testです。";
<%= data %> // OK
<c:out value=${data} /> // NG。data変数はrequest,pageContextなどに設定していないため
OK例
String data = "testです。";
pageContext.setAttribute("data", data);
<%= data %> // OK
<c:out value=${data} /> // OK
使えるタグライブラリ
| 種類 | 説明 |
|---|---|
| core | forEach、if、変数の参照/設定などの基本的なタグ |
| fmt | 数値や日付のフォーマットなど |
| xml | XML文書の解析、XSLスタイルシート |
| functions | 文字列一般関数(containsなど) |
| sql | SQLを発行し、データベース操作する関数 |
よく使うのは、core,function, fmtです。
coreタグ
導入
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
タグ
| タグ | 説明 |
|---|---|
| c:set | 変数をセット |
| c:remove | 変数を削除 |
| c:out | 出力 |
| c:if | if文(単一の条件分岐) |
| c:choose, c:when, c:otherwise | if-else,if-elseif-else文(複数の条件分岐) |
| c:forEach | ループ |
| c:forTokens | 文字列を区切り文字で分割 |
| c:import | ファイルをインポート |
| c:redirect | リダイレクト |
| c:url | URLを生成 |
| c:catch | 例外処理 |
| c:param | パラメータを指定 |
利用例
<c:set var="score" value="80" />
<c:choose>
<c:when test=${score gt 90}>
<c:out value="とても素晴らしいです。" />
</c:when>
<c:when test=${score gt 80}>
<c:out value="優秀です。" />
</c:when>
<c:otherwise>
<c:out value="頑張ってください。" />
</c:otherwise>
</c:choose>
fmtタグ
導入
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
タグ
| タグ | 説明 |
|---|---|
| fmt:formatNumber | 数値データをフォーマット |
| fmt:formatDate | 日付データをフォーマット |
| fmt:parseNumber | 文字列を数値データに変換 |
| fmt:parseDate | 文字列を日付データに変換 |
| fmt:bundle, fmt:message | リソースのメッセージを取得 |
| fmt:requestEncording> | リクエストの文字エンコーディングをセット |
| fmt:setLocale | ロケールをセット |
| fmt:setTimeZone | タイムゾーンをセット |
| fmt:timeZone | タイムゾーンをセット |
利用例:日付フォーマット
<fmt:formatDate value="${data.updateDate}" pattern="yyyy/MM/dd HH:mm"/>
functionsタグ
導入
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
タグ
| タグ | 説明 |
|---|---|
| fn:contains() | 指定文字列が入っているか |
| fn:containsIgnoreCase() | 指定文字列が入っているか(大文字、小文字区別せず) |
| fn:endsWith() | 末尾文字列は指定文字列か |
| fn:escapeXml() | エスケープ |
| fn:indexOf() | 指定文字列のindexを返す。存在しない場合は-1 |
| fn:trim() | 文字列の前後の空白を削除 |
| fn:startsWith() | 頭文字列は指定文字列か |
| fn:split() | 指定文字列で分割 |
| fn:toLowerCase() | 小文字に変換 |
| fn:toUpperCase() | 大文字に変換 |
| fn:substring() | 指定範囲内の文字列を取り出す |
| fn:substringAfter() | 指定文字列の後ろを取り出す |
| fn:substringBefore() | 指定文字列の前を取り出す |
| fn:length() | 文字列の長さを返す |
| fn:replace() | 置換 |
利用例
<c:set var="favs" value="サーカー、読書" />
<c:out value="${fn:contains(favs, '読書') ? '読書が大好きです。' : '読書に興味がありません。' }"></c:out>
sql
導入
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
詳細:https://www.javatpoint.com/jstl-sql-tags
xml
導入
<%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x" %>
詳細:https://www.javatpoint.com/jstl-xml-tags
以上