【JavaEE】xhtmlの日付型フォーマットのやり方(h:outputFormat+f:paramの型対応・number書式例付き)
とてぃです。
本日はJavaEEのxhtmlでの日付型の表示について、特にh:outputFormat
とf:param
を使った数値フォーマット(ゼロ埋め)や型対応の方法を詳しく解説します。
これまでJava側で日付を文字列変換していましたが、xhtml側で柔軟にフォーマットできる方法を紹介します。
h:outputFormat+f:paramで日付や数値を柔軟にフォーマット
JSFの<h:outputFormat>
タグと<f:param>
タグを組み合わせることで、複数の値を柔軟にフォーマットできます。特にnumber
書式を使えば、ゼロ埋めや桁数指定も可能です。
例:4桁年・2桁月のゼロ埋め表示
<h:outputFormat value="{0,number,0000}/{1,number,00}">
<f:param value="#{bean.year}" />
<f:param value="#{bean.monthly}" />
</h:outputFormat>
この例では、bean.year
とbean.monthly
の値をそれぞれ4桁・2桁のゼロ埋めで表示します。たとえば「2025/05」のような表示になります。
ポイント:
{0,number,0000}
は4桁ゼロ埋め、{1,number,00}
は2桁ゼロ埋めbean.year
やbean.monthly
はLocalDateTime
型やint
型、String
型でもOK- 数値型(int/Integer/longなど)はゼロ埋めされ、文字列型はそのまま表示される
- 複数の値を組み合わせて柔軟にフォーマットできる
JSFのh:outputFormat
は、内部的にJavaのjava.text.MessageFormat
を使っており、number
やdate
などの書式指定が可能です。
型対応(数値型・文字列型)について
- 数値型(int, Integer, long, etc.):指定した
number
書式でゼロ埋めや桁数指定が適用されます。 - 文字列型(String):
number
書式は適用されず、そのまま表示されます。 - 日付型(LocalDate, LocalDateTimeなど)から
getYear()
やgetMonthValue()
で数値を取得して渡すのが一般的です。
例:LocalDateTime型から年・月を取得して渡す
// Java側
public int getYear() {
return localDateTime.getYear();
}
public int getMonthly() {
return localDateTime.getMonthValue();
}
サンプル:オブジェクト名でカラム指定
<h:outputFormat value="{0,number,0000}/{1,number,00}">
<f:param value="#{格納したオブジェクト名.year}" />
<f:param value="#{格納したオブジェクト名.monthly}" />
</h:outputFormat>
このように書けば、LocalDateTime
型(日付型)から取得した年・月をゼロ埋めで表示できます。
正規表現による置換も補足
より柔軟な文字列変換やパターンマッチが必要な場合は、Java側で正規表現(String.replaceAll()
やPattern
クラス)を使って加工し、xhtmlに渡す方法も有効です。
// 例:日付文字列の「-」を「/」に置換
public String getDateForView() {
return dateString.replaceAll("-", "/");
}
ただし、ゼロ埋めや型ごとのフォーマットはxhtml側でh:outputFormat
+number
書式を使う方が保守性が高いです。
まとめ
h:outputFormat
+f:param
で数値型・文字列型どちらも柔軟にフォーマット可能{0,number,0000}
のような書式でゼロ埋め・桁数指定も簡単- 日付型(LocalDateTime等)から年・月を取得して渡すのが実務的
- 正規表現による文字列置換も用途によって活用
- JSFの標準機能を使えば、Java側での変換ロジックが減り、メンテナンス性も向上
この方法を覚えておけば、日付や数値の表示で困ることはほとんどありません。
最後まで読んでいただきありがとうございました。
ディスカッション
コメント一覧
まだ、コメントがありません