例えばこんな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 should not say ''.
…ん?何も表示されない?
どうやら何か間違っているようです。
原因
ラムダ式の実行は、式評価の優先順位が高いのです。
だから
#foo.bar('true')
は
#foo.(bar('true'))
という解釈になります。
そして、これは構文エラーです。
この場合、
(#foo.bar)('true')
と書くことで意図したとおりに動作します。