ELとOGNL

ELは単独で使える ${sessionScope.name}

OGNLはタグライブラリと一緒に使う <s:property value="#session.name">

EL Expression Language

キーワード

true false null div mod and or not eq ne lt gt le ge instanceof empty

OGNL Object Graphic Navigation Language

利用:Struts2のタグ、Seasar2のdiconファイルなど

OGNLの暗黙オブジェクト

★Struts2中の使用例

#

用法1 属性をアクセス

#はActionContext.getContext()に相当する

#session.nameは

ActionContext.getContext().getSession().getAttribute("name")に相当する

用法2 フィルター

persons.{#this.age>20}

用法3 マップ

#{"key1" : "value1", "key2" : "value2"}

Map型

<h:outputText value="#{param.name}"/> </b>

<h:outputText value="#{param['name']}"/> </b>

<h:outputText value="#{someBean.someMap[user.name]}"/>

<h:outputText value="#{someBean.someListOrArray[user.age]}"/>

List型

<h:outputText value="#{someBean.someList[0]}"/>

pageContext.setAttribute("user", user);

<%=user.getAddress( ) %> userは変数

${user.address} userはあるスコープに属する属性

ELの暗黙オブジェクト

★基本

${expr}と#{expr}

JSPの場合、${expr}と#{expr}の解析とは同じ

JSFの場合、${expr}と#{expr}の解析とは異なる

※JSPのライフサイクルがJSFのライフサイクルと異なるため

${expr}は即時評価の式(コンパイル時にコンパイルされ、実行時に1回実行され)に使用

#{expr}は遅延評価の式(必要な時に評価され)に使用

・算数演算:+, -, *, /(div), %(mod)

・関係演算:==(eq), !=(ne), <(lt), >(gt), <=(le), >=(ge)

・論理演算:&&(and), ||(or), !(not)

・その他の演算:(), empty, []...

#{empty book}

#{empty book.title}

#{book.title}

#{book[title]}

#{book.buy()}

#{book.buy('xxx')}

★EL禁止

ページ単位

<%@ page isELIgnored="true|false" %> JSP 2.0以上でデフォルト値はfalse

web単位

<jsp-property-group>

<description>Demo</description>

<display-name>xxx</display-name>

<url-pattern>/jsp/*.jsp</url-pattern>

<el-ignored>true</el-ignored>

<page-encoding>UTF-8</page-encoding>

<scripting-invalid>true</scripting-invalid>

<include-prelude>/jsp/prelude.jspf</include-prelude>

<include-coda>/jsp/coda.jspf</include-coda>

</jsp-property-group>

★EL3.0のアップデート

・Lambda式

・コレクションオペレーション filter、map等のストリームパイプライン

・スタティックフィールド・メソッド参照

・Enumの参照

・セミコロンオペレータ 「;」で複数の処理

・アサインメントオペレータ 「=」で値の代入

・文字列連結オペレータ 「+=」で文字連結

% OGNLを示す

<s:set name="foobar" value="#{'foo1':'bar1', 'foo2':'bar2'}" />

<p><s:url value="#foobar['foo1']" /></p>

<p><s:url value="%{#foobar['foo1']}" /></p>

$ 設定ファイルの中に使う

<validators>

<field name="xxx">

<field-validator type="int">

<param name="min">10</param>

<param name="max">100</param>

<message>数字は必ず${min}と${max}の間である</message>

</field-validator>

</field>

</validators>

★Seasar2中の使用例