为 JSF/ICEfaces 设置浮点格式化语言环境?
Posted
技术标签:
【中文标题】为 JSF/ICEfaces 设置浮点格式化语言环境?【英文标题】:Setting floating point formatting locale for JSF / ICEfaces? 【发布时间】:2010-12-17 00:45:51 【问题描述】:我正在编写一个使用资源包来处理国际化的 JSF (ICEfaces) 应用程序。
应用程序很好地为资源包应用了(默认)荷兰语“nl”语言环境,但未能在格式化浮点数时应用相同的语言环境,即使我使用 <f:view locale="nl">
明确设置页面的语言环境。
如何使浮点数遵循当前的语言环境设置?
【问题讨论】:
【参考方案1】:您可能没有使用转换器将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
【讨论】:
一个小测试告诉我,一个简单的“outputText
可能对数字没有任何直接支持;它将被赋予一个对象(例如java.lang.Double
)并在输出时调用toString
。 inputText
也没有任何直接支持;在输入字符串时,表达式语言根据其类型强制规则将其强制转换回双精度。对于更复杂的逻辑,需要转换器。这是一个强大的模型,因为您可以在任何类型之间进行转换,而无需输入/输出控件来支持转换。
你是对的!问题在于隐式 Java Float.toString() 不考虑区域设置(甚至是操作系统)。 您可以使用nest <convertNumber>
标签并在faces.config.xml 中将默认语言环境设置为“nl”。
这样,转换器会自动获取并使用默认语言环境,您无需在每个 <convertNumber>
标记处指定模式。
faces-config.xml:
<application>
<locale-config>
<default-locale>nl</default-locale>
</locale-config>
</application>
【讨论】:
以上是关于为 JSF/ICEfaces 设置浮点格式化语言环境?的主要内容,如果未能解决你的问题,请参考以下文章
哪种方法用于将动作回调绑定到 JSF/ICEFaces InputFile?