如何覆盖JSF outputFormat语言环境

时间:2017-04-21 23:13:42

标签: jsf jsf-2 localization internationalization

假设我有这样的代码:

<h:outputFormat value="The number is {0, number, #.##}">
  <f:param value="#{bean.double}" />
</h:outputFormat>

根据我的理解,JSF使用MessageFormat(String pattern, Locale locale)方法转换值。因此,如果我的语言环境是西班牙语,而bean.double是3.72,那么即使我的3,72SubformatPattern,结果也会是#.##

有没有办法将数字格式化为3.72并将语言环境保留为西班牙语?

仅供参考,我使用具有区域设置属性的f:view元素设置区域设置 - 例如:

<f:view locale="#{localeBean.locale}"/>

参考:

1 个答案:

答案 0 :(得分:0)

您可以overriding the renderer获取outputFormat代码。

查看Mojarra source for OutputMessageRenderer。找到这个陈述:

MessageFormat fmt = new MessageFormat(currentValue,
                                      context.getViewRoot().getLocale());

在此声明中,将语言环境硬编码为英语,您就完成了。

简单的方法是使用硬编码的语言环境在bean中格式化您的数字并将其作为字符串返回,这样您就可以使用:

<h:outputFormat value="The number is {0}">
  <f:param value="#{bean.formatDouble(bean.double)}" />
</h:outputFormat>

另见: