Mr.*_*mes 3 java numbers currency converter jsf-2
假设我有以下<f:convertNumber>格式来设置货币类型编号:
<f:convertNumber type="currency" locale="#{userSession.locale}" pattern="$###,###.###" />
Run Code Online (Sandbox Code Playgroud)
在英语中,一百万将是1,000,000,但在德国,它应该是1.000.000.我的问题是:如果我使用上面的模式,JSF是否会知道指定语言环境的数字格式并自动使用正确的分隔符?
如果没有,如果您能告诉我如何格式化货币编号并同时指定正确的数字分隔符,我将非常感激.
了解并理解<f:convertNumber>标签DecimalFormat在封面下使用非常重要.您可以在其javadoc中找到所有模式字符.
看来你期望的DecimalFormat模式字符,和.也居然在最后的格式使用.这是不真实的.它是真的仅仅模式字符(如等d,M,y等13759 SimpleDateFormat).基本上,模式字符,告诉DecimalFormat打印由给定语言环境指定的"分组分隔符",等效地,模式字符.告诉DecimalFormat打印给定语言环境指定的"小数分隔符".
在效果中,打印的实际字符取决于给定的区域设置.对于英语语言环境(locale="en"),正在打印的"分组分隔符"也恰好也是,,但对于德语语言环境(locale="de"),确实打印的"分组分隔符" ..
与具体问题无关,如果指定了属性,则type属性<f:convertNumber>完全没有效果pattern.该typeattribtue是在这个例子中基本上多余的,并且可以安全地无任何副作用除去.
如果删除该pattern属性,那么它实际上将被使用,您将看到正在使用货币的默认模式,这与¤#,##0.00英语区域设置和¤ #,##0.00德语区域设置相同.另请注意,表示货币符号的模式字符不是$,但是¤.货币符号可以通过currencySymbol属性单独设置.所以货币的正确方法是:
<f:convertNumber type="currency" locale="#{userSession.locale}" currencySymbol="$" />
Run Code Online (Sandbox Code Playgroud)
再次,请看DecimalFormat之前链接的javadoc.