JSTL の fmt タグでフォーマットが無視される場合のメモ
2008年 7月 15日 18:26JSTL の fmt タグはいろいろなフォーマットで出力できるので便利なのですが、きちんとロケール情報を設定してあげないと、フォーマットが効かない場合があります。
通常はブラウザから送信されてくるリクエストヘッダーのロケール情報を見ているようですが、携帯サイトのようにiモードブラウザからアクセスされる環境だと、ロケール情報がきちんと送信されて来ず、 fmt タグが有効にならない場合があるようです。
例えば、fmt:formatDate タグを使って年のみ表示したい場合は次のような感じで記述しますが、
<%-- todayはdate型で日付が入ってるとします。 --%>
<fmt:formatDate value="${today}" pattern="yyyy"/>
ロケール情報がきちんと設定されていないと、
Tue Jul 15 18:03:41 GMT+09:00 2008
というような感じで表示されてしまいます。
きちんと yyyy のフォーマットで出力した場合には jsp の先頭の方に fmt:setLocale タグを使ってロケールを常に設定してあげる必要があります。
<%-- ロケール情報を設定 --%>
<fmt:setLocale value="ja-JP" />
<%-- todayはdate型で日付が入ってるとします。 --%>
<fmt:formatDate value="${today}" pattern="yyyy"/>
結果は
2008
となります。
ロケール情報は fmt 関連タグ全般の話になりますので、fmt:formatNumber 等でも同様の現象が発生するようです。
