web-dev-qa-db-ja.com

jsfで2点10進形式で数値を表示する

私はJSF 2とRichFaces 3を使用しています。以下の図では、数値はデータベースにあるものとして表示されています。

enter image description here

ただし、小数部がある場合は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>

実際にすべてを一緒に表示していますが、typegroupingUsedminFractionDigits、およびpatternとの可能なすべての組み合わせとして、それらすべてを試しました。

なぜ機能しないのですか?これはどのように引き起こされ、どのように解決できますか?

15
Addicted

値が 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も参照してください。

39
BalusC