Slim3 JSP で f:h Text#getValue() は使えない
Text型で保存されたデータをいつ String 型に変換するかを悩み、他の人はどうしているのか調べてみたところ、
higayasuo 2009/06/28 10:06
http://d.hatena.ne.jp/suzune64/20090627/1246110579#c1246151209
後、r297でf:hでもText#getValue()を呼び出すように修正しました。
と書かれていたので、試してみたところ、エラーが発生する。*1
確かに、Javadoc にも
Encodes the input object. If the object is a string, it is escaped as HTML. If the object is a key, it is encoded as Base64. Anything else is converted to a string using toString() method.
http://slim3.googlecode.com/svn/trunk/slim3/javadoc/
と書かれているだけで、Text#getValue() については触れられていない。
他の人の解決方法では、Model クラスで型変換を実装している人が多いようだ。
Text 型のプロパティを返すための便宜上の String 型のプロパティを用意して、getter で値を取得する際に Text 型に変換して値を渡すという方法だ。
private Text text; private String string; public void setText(Text text) { this.text = text } public Text getText() { return text; } public String getString() { return (null == text) ? null : text.getValue(); }
この JSP の Text#getValue() は一度実装されたけれども、実装を削除されたのだと思うが、その改訂履歴が見つからなかったのと、他に f:h(Text#getValue()) でコードを書いているサンプルが見つからなかったので、随分前に実装が変更されていのだろうと思う。
追記
ここまで書いて思ったのが、仮に Text#getValue() の実装は、
${f:h(text.getValue())}
だったのだろうか。それとも
${f:h(text).getValue()}
だったのだろうか。
*1:上記の文を見つける前にダメもとで既に試していたので、エラーが発生することは予想済みだった。