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中の使用例