为JSF / ICEfaces设置浮点格式化语言环境?

5

我正在编写一个使用资源包处理国际化的JSF(ICEfaces)应用程序。

该应用程序很好地应用了(默认的)荷兰语“nl”区域设置的资源包,但是在格式化浮点数时未能应用相同的区域设置,即使我明确使用<f:view locale="nl">为页面设置了区域设置。

如何使浮点数遵循当前的区域设置?

2个回答

6

很可能您没有使用转换器来对数字进行格式化以符合适当的区域设置。

  <f:view locale="nl">
    <h:outputText value="#{numbers.someDouble}">
      <f:convertNumber pattern="#,##0.00;(#,##0.00)" />
    </h:outputText>
    <br />
    <h:outputText value="#{numbers.someDouble}">
      <f:convertNumber locale="en" pattern="#,##0.00;(#,##0.00)" />
    </h:outputText>
  </f:view>

这个视图(一个荷兰语本地化视图,带有一个数字,后面是一个英语本地化数字)产生以下输出:
12.341.234,43
12,341,234.43

一次小测试告诉我,一个简单的"<f:convertNumber/>"就足够了。我很困惑为什么JSF默认不会将浮点数格式化为当前区域设置,但你的解决方案非常好用。谢谢! - Timo
1
outputText 可能没有对数字的直接支持;它会被赋予一个对象(例如 java.lang.Double),并在输出时调用 toString。对于 inputText,也没有直接的支持;在输入字符串时,表达式语言按照类型强制转换规则将其强制转换回 double。对于更复杂的逻辑,需要使用转换器。这是一个强大的模型,因为您可以转换到/从任何类型,而不需要输入/输出控件支持转换。 - McDowell
你是对的!问题在于隐式的Java Float.toString()没有考虑区域设置(甚至操作系统的设置)。<f:convertNumber/>标签有效地告诉outputText使用区域感知的字符串转换。 - Timo
@McDowell,能否请您解释一下这个模式是如何解释的?先感谢您! - Elias Dorneles
@eljunior - 如果帖子中的链接不够用,请提出一个新问题。 - McDowell

1

您可以在 faces.config.xml 中使用嵌套的 <convertNumber> 标签,并将默认区域设置为 "nl"。

这样,转换器会自动获取并使用默认区域,您无需在每个 <convertNumber> 标签中指定模式。

faces-config.xml:

    <application>
        <locale-config>
          <default-locale>nl</default-locale>
        </locale-config>
    </application>

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