この日記は私的なものであり所属会社の見解とは無関係です。 GitHub: takahashikzn

OGNL

OGNLだけでMapのソート

OGNLだけでマップのソートをしてみました。こんな感じ。 <%-- このマップを、キーを数値とみなしてソートしたいとする --%> <s:set var="unsorted" value=" #{ '1': 'a', '10': 'b', '2': 'c' }" /> <%-- まずTreeMapのインスタンスを作成する --%> <s:set var="sorted" value="#@java.util.TreeMap@{}" /> <%-- コレは次のようにしても同じ--%> <%--s:set var="sorted" value="new java.</s:set></s:set>…

throwExceptionOnFailureを試す

Struts-2.1.8になって、OGNLは2.7.3へとバージョンアップしました。 それに伴い、OGNLで存在しないプロパティへアクセスしようとしたときに例外を投げるかどうかのスイッチ (struts.el.throwExceptionOnFailure)が追加されました。 昔の記事でもちょっと言及…

プロパティの値としてラムダ式を保持する場合の注意点

例えばこんなOGNL式があったとします。 <s:set var="foo" value="#{ 'bar': :[#this ? 'YES' : 'NO' ] }" />単に、プロパティfoo.barにラムダ式をセットしただけです。 では、ラムダ式を実行してみましょう。 <s:set var="foo" value="#{ 'bar': :[#this ? 'YES' : 'NO' ] }" /> You should not say '<s:property value="#foo.bar(true)" />'. YES と表示されるはずですよね。 実行結果は次の通りです。 You shou…</s:property></s:set></s:set>

Selecting First Match式の動作が仕様と異なる(ような気が)

OGNLには、Selecting First Match式(以下、SFM式)というものがあります。 SFM式とは これは、コレクションから指定した条件にマッチする最初の値を取得するために使用する式です。 要するに、みんな大好き内部イテレータのバリエーションの一つです。 例えば…

"Selecting From Collections"式とLambda式の怪

(2009/08/25修正: Enumだけの問題ではなく普通のBeanでも現象が発生したため、文言を若干修正しました) OGNLのSelecting From Collections式(以下、SFC式)は、コレクションから条件にマッチする要素だけを抽出する式です。 みんな大好き内部イテレータってヤ…

OGNL式で存在しないプロパティへアクセス

先程まで、OGNL式の謎の例外に悩まされていたのですが、 Caused by: java.lang.NullPointerException at com.opensymphony.xwork2.ognl.OgnlValueStack.checkForInvalidProperties(OgnlValueStack.java:298) at com.opensymphony.xwork2.ognl.OgnlValueStack…