LoginSignup
35
31

More than 3 years have passed since last update.

JSTLの再入門

Last updated at Posted at 2019-10-14

はじめに

歴史長い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

以上

35
31
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
35
31