私はJSF 2とRichFaces 3を使用しています。以下の図では、数値はデータベースにあるものとして表示されています。
ただし、小数部がある場合は6749395.20
、小数部がない場合は5095138.00
として表示したいと思います。
今のところ、私はこのようなことを試しました。
<rich:column>
<f:facet name="header">
<h:outputText value="Total Amount"/>
</f:facet>
<h:outputText value="#{rr[2]}">
<f:convertNumber type="number" groupingUsed="true" minFractionDigits="2" pattern="#0.00"/>
</h:outputText>
</rich:column>
実際にすべてを一緒に表示していますが、type
、groupingUsed
、minFractionDigits
、およびpattern
との可能なすべての組み合わせとして、それらすべてを試しました。
なぜ機能しないのですか?これはどのように引き起こされ、どのように解決できますか?
値が Number
でない場合、たとえばString
の場合に発生する可能性があります。基本的には、それが表すデータに対して間違った型を使用しています。 Javaで通貨を表すには、 BigDecimal
を使用する必要があります。また、データベーステーブルの型が正しいことを確認してください。つまり、varcharではなく10進数でなければなりません。
データ型を修正すると、_<f:convertNumber>
_は指示どおりに機能します。 pattern
属性は、groupingUsed
およびminFractionDigits
をオーバーライドすることに注意してください。 pattern
またはその他を使用する必要があります。また、_type="number"
_はすでにデフォルトであるため、削除できます。
だから、どちらかを使用する
_<f:convertNumber pattern="#0.00" />
_
または
_<f:convertNumber groupingUsed="true" minFractionDigits="2" />
_
異なる形式を生成することに注意してください。おそらく、グループ化をfalse
に設定する必要があります。
_type="currency"
_を使用することもでき、UIViewRoot#getLocale()
に従って正しいパターンを自動的に適用します:
_<f:convertNumber type="currency" />
_
タグライブラリドキュメント および DecimalFormat
javadocも参照してください。