MessageComponentを修正する(日付けを表示する)

次に、日付け表示を直してみたいと思います。
日付けはMessageオブジェクトのsubmitDateを表示する事にします。
WebObjectsであれば、バインドする時に日付けのフォーマット書式を与えてやれば簡単なんですが、ちょっとみたところTapestryには無いようなので、単純にInsertコンポーネントを使って表示して、文字列は自力で作成したいと思います。
日付けをフォーマットする時は、java.text.SimpleDateFormatあたりを使うのが常套手段でしょうけど、まともにやってもつまらないので、Jakarta Commons Langに登場願いましょう!

Jakarta Commons自体は様々なライブラリから成り立っており、これなしでは一つも仕事ができない・・・と言っても過言じゃないくらい、普段お世話になっております。
今回使用するのは、その中でも地味さNo.1、Langです。
Langと言うくらいですから、J2SEの補助的な役割を持つクラスがたくさん入っています。
今回はFastDateFormatクラス(org.apache.commons.lang.time.FastDateFormat)を使用してます。
このクラスはjava.text.Formatのサブクラスとして実装されており、「速くてマルチスレッドな」最強のFormatとして位置づけられています(笑)

では、実際やってみましょう。
MessageクラスにgetDisplayDateメソッドを追加し、そこに実装してみたいと思います。

Message.java(抜粋)

public String getDisplayDate() {
	FastDateFormat formatter = FastDateFormat.getInstance("yyyy/MM/dd(E) HH:mm:ss");
	return formatter.format(getSubmitDate());
}

・・・ってこれじゃぁSimpleDateFormatを使ったのと変わりないですね(笑)
と言う訳でちょっと使ってみたかっただけです・・すみません・・
でも、org.apache.commons.lang.time.DateFormatUtilsなんかだと、多少使い勝手があります。
ついこの間の仕事でISO8601フォーマットにする必要があったのですが、ずばりDateFormatUtilsにありました。
ちなみにorg.apahce.commons.lang.timeパッケージは2.0から入ったようです。Tapestry3.0に付属のlangは1.0ですので、ご注意を。
それが嫌だなと思われる方は、素直にSimpleDateFormatをご使用ください(笑)

ちょっと寄り道しましたが、MessageComponentの修正に戻ります。
先ほど作ったgetDisplayDateメソッドを利用して、日付けを表示するように改造します。

MessageComponent.html(抜粋)

<div align="right">
	<span jwcid="displayDate">2004/09/01(水) 12:00</span>	
</div>

MessageComponent.jwc(抜粋)

<component id="displayDate" type="Insert">
	<binding name="value" expression="message.displayDate"/>
</component>

これで日付け表示ができるようになりました。