JSP 2.0以降で使えるEL式の実践ガイド

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
initParamweb.xml内の<context-param>値を保持するMap
cookieクッキー名をキーとするMap<String, Cookie>
pageContextPageContextインスタンスそのもの
${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関数の作成手順

  1. public staticメソッドを持つユーティリティクラスを作成
    package com.example.util;
    public class TextUtil {
        public static String reverse(String s) {
            return new StringBuilder(s).reverse().toString();
        }
    }
    
  2. 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>
    
  3. JSPでタグライブラリを宣言して使用
    <%@ taglib prefix="my" uri="/WEB-INF/tlds/custom.tld" %>
    ${my:reverse("Hello")}
    

タグ: JSP EL JSTL JavaEE Web開発

8月2日 09:40 投稿