JSTL

JSTLの式言語(Expression Language)内で、オブジェクト内の定数(public static finalなプロパティ)を取得できないのか調べてみる。具体的に言うと、
(Constantsはクラス、FLAG_TRUEはそのクラス内の定数)
とか書きたいのだが…。しかし、JSTLに関する日本語の情報は全然ない。

他に使えるのはJakarta徹底攻略本か。
んで、英語のサイト。こちらも2次情報源であまり良いものは見つからず、1次情報源のみ挙げとく。

このリファレンスってのはJSTL in Action という本の一部分なのだが、この本を出版したmanning社の本は、サンプルPDFを大量にダウンロードさせてくれるのでかなりありがたい。
Strutsもvalidatorに関する日本語の情報が全然なくて困っていたときに使わせていただきました。英語版だと会社ではなかなか買いづらいので(-。−;)、日本語版出たら絶対買います。
結局本家の情報を調べた結果、getterが無いプロパティは取得できないと判明。「オブジェクト.プロパティ名」という書式を使って式言語内で取得出来るのは、

  • オブジェクトがListもしくは配列の時
    プロパティ名の部分がが数字(int型)に変換出来るものなら、オブジェクト.get(プロパティ名)で取得できる値、もしくはArray.get(オブジェクト, プロパティ名)で取得できる値。プロパティ名の部分が数字でない場合エラー。
  • プロパティ名オブジェクトがMapの時
    そのオブジェクトのget(プロパティ名)メソッドの返り値。
  • オブジェクトがその他のオブジェクトの時
    getプロパティ名()というメソッド (JavaBeansの命名規則に従うので、プロパティ名がaddressなら、getAddress()になる)の返り値。get〜メソッドの無いプロパティはpublicでも取得できない。

どうしても定数を参照したいときは、JSTLではなく、スクリプトレット内で変数に詰め込んであげると、それ以降式言語内で参照出来る。


<%
pageContext.setAttribute("TRUE", Constants.FLAG_TRUE);
%>