#はじめに
歴史長い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
以上