S2JSFを使ってみる(2)

今日はドキュメントにあるconverter.htmlを試してみる。

○まずはconverter.html


<form>
<span m:inject="h:messages" m:globalOnly="false" m:showDetail="true"/>
Hire Date:

<input type="text" m:value="#{converterDto.date}" m:label="Hire Date"
m:converter="#{inputDateTimeConverter}"/>

<span m:value="#{converterDto.date}"
m:converter="#{outputDateTimeConverter}"/>

<input type="submit" value="submit"/>
</form>

<span m:inject="h:messages" m:globalOnly="false" m:showDetail="true"/>
の部分にエラーメッセージが出るみたい。

で、inputDateTimeConverterとかoutputDateTimeConverterとかっていうのがコンバータ
と呼ばれ、データをある形式に変換してくれるものらしい。

今まではEntityクラスに自分自身が持つデータをフォーマットして返すメソッドを用意して
それをJSPで表示させていたが、その必要がなくなるのはとてもうれしい!

inputタグの部分が実際の日付を入れる部分



○ConverterDtoクラス


package sample.dto;

import java.io.Serializable;

public class ConverterDto implements Serializable {
String date;

public String getDate() {
return date;
}

public void setDate(String date) {
this.date = date;
}
}

サブミットボタンを押したらこのDTOに入力した日付が入る。
サブミットボタンを押したら、このクラスのDateプロパティに値がセットされるなんて
どこにその設定が書かれているんだろう??

inputタグのm:value属性が"#{converterDto.date}"になっているので、自動的にセット
されているみたい。

<input type="submit" value="submit"/>
このようにどこのメソッドを呼ぶのかの指定がなければ、自動的に入力コンポーネント
記述されたものが対象のDTOに入って、かつ自分のページを再表示させるようだ。多分…
こういうことはドキュメントに書いてあると嬉しいんだけど。。。



○allconverter.dicon




"yyyyMMdd"


"yyyy/MM/dd"


ここにコンバータクラスと、そのフォーマット形式を登録する。
allconverter.diconやDtoを登録しているconverter.diconはapp.diconでincludeする必要あり。

で実行すると、意図しない動きをした。

テキストフィールドに「20060215」と入力すると、元から用意されているs2jsf-exampleの環境で実行すると
うまく「2006/02/15」と表示されるが、自分で作成したものを実行すると「Wed Feb 15 00:00:00 JST 2006」
という表示になってしまう。

outputDateTimeConverterが機能していないみたいだけど、どうして?設定が間違っているのかな?