2009-11-16 118 views
5

我正在编写一个JSF(ICEfaces)应用程序,使用资源束来处理国际化。为JSF/ICEfaces设置浮点格式化区域设置?

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

如何使浮点数跟随当前的区域设置?

回答

6

很可能您没有使用转换器将format的数字转换为相应的语言环境。

<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 
+0

一个小测试让我明白了一个简单的 “” 已足够在我的情况。我很疑惑为什么JSF不会默认格式化一个浮点到当前的语言环境,但你的解决方案就像一个魅力。谢谢! – Timo 2009-11-16 12:44:15

+1

'outputText'可能不会直接支持数字;它会被赋予一个对象(例如'java.lang.Double')并在输出上调用'toString'。 'inputText'也不会有任何直接的支持;在输入一个字符串时,表达式语言根据其强制类型的规则强制回到一个double。对于更复杂的逻辑,需要一个转换器。这是一个强大的模型,因为您可以转换为任何类型或不需要输入/输出控件来支持转换。 – McDowell 2009-11-16 14:16:55

+0

你是对的!问题在于隐含的Java Float.toString(),它不考虑区域设置(即使是OS)。 标记有效地告诉outputText使用感知区域的字符串转换。 – Timo 2009-11-18 12:46:39

1

您可以使用嵌套<convertNumber>标签并设置默认语言环境“ nl“在faces.config.xml中。 这样,转换器会自动获取并使用默认语言环境,并且您无需在每个<convertNumber>标记处指定模式。

faces-config.xml中:

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