読者です 読者をやめる 読者になる 読者になる

この日記は私的なものであり、所属会社の見解ではありません。 GitHub: takahashikzn

throwExceptionOnFailureを試す

OGNL

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


昔の記事でもちょっと言及したことがあります。


さて、早速試してみました。
次のようにすれば準備はOK。

<struts>
  <constant name="struts.el.throwExceptionOnFailure" value="true" />

  ...

</struts>

しかし…

しかし…残念ながら、JSPを大幅に改修しないとマトモに使えないことが判りました。


例えば、今までなら動作していた次のようなコードが動作しなくなります。

<s:if test="#map.booleanValue">
  ...
</s:if>


これは、これまでは「#map.booleanValueが存在し、かつtrue」ならtrueである評価されていたOGNL式です。


ところがthrowExceptionOnFailureをONにすると、#map変数のプロパティbooleanValueが「存在」しない場合、その時点でエラーになってしまいます。
だからこの場合だと、例えば次のように修正する必要があります。

<%-- キーが存在することを確かめないとダメ --%>
<s:if test="#map.containsKey('booleanValue') && #map.booleanValue">
  ...
</s:if>


まあこんな感じです。if-elseなんて至る所で使ってますし、きっとこれ以外にもいろいろあるでしょうから、
全部修正すると相当な手間になると思います。


というわけで、throwExceptionOnFailureを使うのはとりあえずヤメにしました(-_-)
無念。