当使用模式格式化货币时,<f:convertnumber>是否使用正确的数字分隔符?</f:convertnumber>

时间:2013-11-04 09:42:48

标签: java jsf-2 numbers converter currency

假设我有以下<f:convertNumber>格式化货币类型编号:

<f:convertNumber type="currency" locale="#{userSession.locale}" pattern="$###,###.###" />

在英语中,一百万将是1,000,000,但在德国,它应该是1.000.000。我的问题是:如果我使用上面的模式,JSF是否会知道指定语言环境的数字格式并自动使用正确的分隔符?

如果没有,如果您能告诉我如何格式化货币编号并同时指定正确的数字分隔符,我将非常感激。

1 个答案:

答案 0 :(得分:5)

了解并了解<f:convertNumber>标记使用DecimalFormat非常重要。您可以在its javadoc中找到所有模式字符。

您似乎希望DecimalFormat模式字符,.实际上也以最终格式使用。这是不真实的。它实际上只是模式字符(如d所使用的MySimpleDateFormat等。基本上,模式字符,告诉DecimalFormat打印由给定语言环境指定的“分组分隔符”,等效地,模式字符.告诉DecimalFormat打印给定语言环境指定的“小数分隔符”。

在效果中,正在打印的实际字符取决于给定的区域设置。对于英语区域设置(locale="en"),正在打印的“分组分隔符”恰好也是,,但对于德语区域设置(locale="de"),正在打印的“分组分隔符”确实是{{ 1}}。


如果指定了.属性,则type的{​​{1}}属性对具体问题

无关完全没有影响。 <f:convertNumber> attribtue在这个例子中基本上是多余的,可以安全地删除而没有任何副作用。

如果您删除pattern属性,那么它实际上将被使用,您将看到正在使用货币的默认模式,这与英语区域设置的type相同, pattern用于德语区域设置。另请注意,表示货币符号的模式字符不是¤#,##0.00,而是¤ #,##0.00。货币符号可以通过$属性单独设置。所以货币的正确方法是:

¤

再次,请参阅之前链接的currencySymbol javadoc。