PGBox
P
G
Box

EL式【基本】

JSPのメニューへ戻る



使用した環境
JDK 6 Update 11
Tomcat 6.0.18

リクエストやセッションからの値取得が容易となるEL式のサンプルです。


JSPを記述しやすくするためにJSP2.0から導入された技術です。
従来のスクリプトレットよりも簡潔な記述が可能な上、カスタムタグとの調和性も高いものとなっています。

動作環境

JSP2.0をサポートしているwebアプリケーションサーバでないと動作しません。
tomcatであれば、バージョン5.0から対応されています。

また、web.xmlにてサーブレット2.4の宣言が記述されていないと動作しません。
web.xmlの先頭にて
<web-app>
とされている場合は

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
と書き換えてください。


また、web.xmlにて
<jsp-config>
    <jsp-property-group>
        ...
        <el-ignored>true</el-ignored>
        ...
    </jsp-property-group>
</jsp-config>
といったように、<el-ignored>true</el-ignored>と定義されている場合はEL式は無効になっていますので
<el-ignored>false</el-ignored>に変更する必要があります。
<el-ignored>の記述が特にない場合は使用可能です。


EL式の基本文法


EL式は
${式}
といった形で記述を行います。

例えば、リクエストスコープから値を取得するには以下のようになります。
<% request.setAttribute("sample", "サンプル"); %>

${sample}


このJSPを実行すると以下のような結果となります。
サンプル

同様にセッションからの値の取得も
<% session.setAttribute("sample", "サンプル"); %>

${sample}

といったようにして行う事が可能です。

上記2つのサンプルでは取得するスコープを省略していますが、下記のように明示的にスコープを指定する事も可能です。
${sessionScope.sample}


EL式では以下のような暗黙オブジェクトが用意されています。
オブジェクト意味
pageScopepageスコープの値が取得できる
requestScoperequestスコープの値が取得できる
sessionScopesessionスコープの値が取得できる
applicationScopeaplicationスコープの値が取得できる
pageContextpageContextオブジェクト
paramリクエストパラメータの値が取得できる
paramValuesリクエストパラメータの値が取得できる(配列で取得)
headerリクエストヘッダの値が取得できる
headerValuesリクエストヘッダの値が取得できる(配列で取得)
initParam初期パラメータの値が取得できる
cookieクッキーの値が取得できる



オブジェクト・配列/リスト・Mapからの取得


以下のように、ネストされたオブジェクトを取得する事も可能です。
SampleItem.java
public class SampleItem {
        
    private String aaa;
    
    private String bbb;
    
    ※ 以下setter, getter
}

JSP
<%
    SampleItem item = new SampleItem();
    item.setAaa("AAA");
    item.setBbb("BBB");
    pageContext.setAttribute("item", item);
%>

${item.aaa}
${item.bbb}


また、ドットだけではなく[""]によってプロパティを指定して取得する事も可能です。
${item.aaa}
${item.bbb}

${item["aaa"]}
${item["bbb"]}
は同じ結果を返します。



配列やリストの任意のインデックスの値を取得するには以下のようにします。
<%
    String[] array = new String[]{"A", "B", "C"};
    pageContext.setAttribute("array", array);

    java.util.List<String> list = new java.util.ArrayList<String>();
    list.add("a");
    list.add("b");
    list.add("c");
    pageContext.setAttribute("list", list);
%>

${array[1]}
${list[2]}



Mapにセットされた値はプロパティの取得の場合と同様の方法で取得できます。
<%
    java.util.Map<String, String> map = new java.util.HashMap<String, String>();
    map.put("aaa", "AAA");
    map.put("bbb", "BBB");
    pageContext.setAttribute("map", map);
    
%>

${map.aaa}
${map["bbb"]}





演算


数値の演算も可能であり
${1 + 1 + 1}
と記述した場合
3
と出力されます。

スコープから取得した値を演算に使用する事もできます。
<% pageContext.setAttribute("sample", "100"); %>
${sample + 100}
スコープから取得した値がStringであっても、数値として評価可能な値であれば、演算は可能です。

以下のように、比較演算子や三項演算子の使用も可能です。
${sample >= 100 ? "100以上" : "100より小さい"}

利用可能な演算子は以下のようになります。
演算子キーワード意味
+加算
-減算
/div除算
%mod剰余(余り)
==eq等しい
!=ne等しくない
<lt右辺よりも小さい
>gt右辺よりも大きい
<=le右辺以上
>=ge右辺以下
emptynullもしくは空文字
&&and
||or
!not否定
式 ? 式 : 式三項演算子


演算子はキーワードでも記述可能です。
例えば
${a >= b ? "1" : "2"}

${a ge b ? "1" : "2"}
は、同じ意味です。


カスタムタグとの調和


EL式は表示出力に使用するだけでなく、JSPカスタムタグに対して値を与える事も可能です。
<c:out value="${sample}"/>

また、EL式は式の結果をStringではなくObjectとしてJSPカスタムタグに与えますので、コレクションや配列などを
カスタムタグで受け取る事も可能です。

これにより、スクリプトレットでrequest.getParameter()やpageContext.getAttribute()を記述する事を余儀なくされていた場面でも
EL式で簡潔な記述が行えるようになります。





JSPのメニューへ戻る