javax.faces.convert.ConverterException: 无法理解为货币值

3

我不能将数字显示为货币。

我使用的代码为:

<h:outputText id="id_importo" value="33333,33"> 
    <f:convertNumber type="currency" currencySymbol="€" locale="it_IT"/>
</h:outputText>

这导致了以下错误:

javax.faces.convert.ConverterException: id_importo: '33333,33' could not be understood as a currency value.
    at javax.faces.convert.NumberConverter.getAsObject(NumberConverter.java:621)
    at 
....

Caused by: java.text.ParseException: Unparseable number: "33333,33"
    at java.text.NumberFormat.parse(NumberFormat.java:344)
    at javax.faces.convert.NumberConverter.getAsObject(NumberConverter.java:614)
    ... 63 more

我甚至尝试了<h:outputText id="id_importo" value="33333,33">,但没有成功。

1个回答

5
您正在尝试将一个硬编码的字符串转换为货币数值。字符串值“33333,33”不是有效的货币数值。您需要在该字符串前缀加上货币符号,完全与您在转换器中声明的货币符号相同。逗号可以保留,因为它确实是意大利语环境中的正确小数分隔符。
<h:outputText id="id_importo" value="€ 33333,33">    
    <f:convertNumber type="currency" currencySymbol="€" locale="it_IT" />
</h:outputText>

或者,如果您想将其解释为真正的十进制数,则应该在EL表达式中包装该值并使用Java自己的小数分隔符.

<h:outputText id="id_importo" value="#{33333.33}">    
    <f:convertNumber type="currency" currencySymbol="€" locale="it_IT" />
</h:outputText>

通常情况下,货币数字被存储为 BigDecimal 类型的bean属性,而不是字符串类型的属性。

<h:outputText id="id_importo" value="#{bean.price}">    
    <f:convertNumber type="currency" currencySymbol="€" locale="it_IT" />
</h:outputText>

private BigDecimal price;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接