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

Gyo*_*der 3 jsf currency

我无法将数字显示为货币.

我使用的代码是:

<h:outputText id="id_importo" value="33333,33"> 
    <f:convertNumber type="currency" currencySymbol="€" locale="it_IT"/>
</h:outputText>
Run Code Online (Sandbox Code Playgroud)

产生此错误:

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
Run Code Online (Sandbox Code Playgroud)

我甚至<h:outputText id="id_importo" value="33333,33">没有运气.

Bal*_*usC 5

您正在尝试将硬编码字符串转换为货币编号.字符串值33333,33不是有效的货币号.您需要在前面添加货币符号,这恰好是您在转换器中声明的货币符号.逗号可以保留为意大利语语言环境中的正确小数分隔符.

<h:outputText id="id_importo" value="€ 33333,33">    
    <f:convertNumber type="currency" currencySymbol="€" locale="it_IT" />
</h:outputText>
Run Code Online (Sandbox Code Playgroud)

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

<h:outputText id="id_importo" value="#{33333.33}">    
    <f:convertNumber type="currency" currencySymbol="€" locale="it_IT" />
</h:outputText>
Run Code Online (Sandbox Code Playgroud)

通常,货币编号存储为BigDecimal类型bean属性,而不是字符串类型属性.

<h:outputText id="id_importo" value="#{bean.price}">    
    <f:convertNumber type="currency" currencySymbol="€" locale="it_IT" />
</h:outputText>
Run Code Online (Sandbox Code Playgroud)
private BigDecimal price;
Run Code Online (Sandbox Code Playgroud)