リファレンストップへ Java | EL式【基本】使用した環境 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> といったように、<el-ignored>true</el-ignored>と定義されている場合はEL式は無効になっていますので<jsp-property-group> ... <el-ignored>true</el-ignored> ... </jsp-property-group> </jsp-config> <el-ignored>false</el-ignored>に変更する必要があります。 <el-ignored>の記述が特にない場合は使用可能です。 EL式の基本文法EL式は ${式} といった形で記述を行います。例えば、リクエストスコープから値を取得するには以下のようになります。 <% request.setAttribute("sample", "サンプル"); %> ${sample} このJSPを実行すると以下のような結果となります。 サンプル 同様にセッションからの値の取得も <% session.setAttribute("sample", "サンプル"); %> といったようにして行う事が可能です。${sample} 上記2つのサンプルでは取得するスコープを省略していますが、下記のように明示的にスコープを指定する事も可能です。 ${sessionScope.sample} EL式では以下のような暗黙オブジェクトが用意されています。
オブジェクト・配列/リスト・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"); %> スコープから取得した値がStringであっても、数値として評価可能な値であれば、演算は可能です。${sample + 100} 以下のように、比較演算子や三項演算子の使用も可能です。 ${sample >= 100 ? "100以上" : "100より小さい"} 利用可能な演算子は以下のようになります。
演算子はキーワードでも記述可能です。 例えば ${a >= b ? "1" : "2"} と${a ge b ? "1" : "2"} は、同じ意味です。カスタムタグとの調和EL式は表示出力に使用するだけでなく、JSPカスタムタグに対して値を与える事も可能です。 <c:out value="${sample}"/> また、EL式は式の結果をStringではなくObjectとしてJSPカスタムタグに与えますので、コレクションや配列などを カスタムタグで受け取る事も可能です。 これにより、スクリプトレットでrequest.getParameter()やpageContext.getAttribute()を記述する事を余儀なくされていた場面でも EL式で簡潔な記述が行えるようになります。 |
|