EL式の概要
JSP 2.0より、スクリプトレット(<% … %>)は非推奨となり、代わりにEL(Expression Language)とJSTLタグを用いた記述が推奨されています。ELは主に値の出力にのみ使用され、<%= … %>を置き換える役割を果たします。
スコープオブジェクトへのアクセス
${key} と記述すると、page → request → session → application の順で属性を探索し、該当がなければ空文字列が返されます。
${requestScope.employee.address.street}
<!-- 内部的には ((Employee) request.getAttribute("employee")).getAddress().getStreet() と同義 -->
明示的にスコープを指定する場合は以下のように記述します。
${pageScope.xxx}${requestScope.xxx}${sessionScope.xxx}${applicationScope.xxx}
EL 11種の暗黙オブジェクト
ELは11個の暗黙オブジェクトを提供しており、うち10個はMap型、残り1個のpageContextはPageContext型です。
| オブジェクト | 説明 |
|---|---|
| param | 単一値パラメータを保持するMap |
| paramValues | 複数値パラメータを保持するMap |
| header | 単一値ヘッダを保持するMap |
| headerValues | 複数値ヘッダを保持するMap |
| initParam | web.xml内の<context-param>値を保持するMap |
| cookie | クッキー名をキーとするMap<String, Cookie> |
| pageContext | PageContextインスタンスそのもの |
${initParam.dbUrl}
${cookie.JSESSIONID.value}
${pageContext.request.contextPath}
JSTL関数ライブラリの活用
次のディレクティブでJSTL関数を利用可能にします。
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
代表的な関数一覧
${fn:toUpperCase(str)}${fn:contains(str, sub)}${fn:substring(str, 3, 8)}${fn:length(list)}${fn:join(array, ',')}${fn:escapeXml(html)}
独自EL関数の作成手順
- public staticメソッドを持つユーティリティクラスを作成
package com.example.util; public class TextUtil { public static String reverse(String s) { return new StringBuilder(s).reverse().toString(); } } WEB-INF/tlds/配下にcustom.tldを配置<function> <name>reverse</name> <function-class>com.example.util.TextUtil</function-class> <function-signature>java.lang.String reverse(java.lang.String)</function-signature> </function>- JSPでタグライブラリを宣言して使用
<%@ taglib prefix="my" uri="/WEB-INF/tlds/custom.tld" %> ${my:reverse("Hello")}