【问题标题】:JSF how to ignore operating system language by configuring locale?JSF 如何通过配置语言环境来忽略操作系统语言?
【发布时间】:2013-04-05 13:06:54
【问题描述】:

根据操作系统的 $LANG 值,JSF 页面中数字的显示是不同的。例如,使用代码:

<h:outputText value="#{myController.myNumberValue}" />

使用 $LANG = en_US.ISO-8859-1,我有“623, 451”。使用 $LANG = fr_FR.UTF-8,我有“623 451”。

我的问题是我的应用程序如何能够独立于操作系统配置?

我在 faces-config.xml 中尝试了以下配置,但它不起作用:

<locale-config>
    <default-locale>en</default-locale>
</locale-config>

我也尝试将 h:outputText 标签封装在以下标签中,但它也不起作用:

<f:view locale="en">
    <h:outputText value="#{myController.myNumberValue}" />    
</f:view>

有什么办法可以解决我的问题吗?

提前致谢。

【问题讨论】:

  • 哪个 JSF 实现/版本?
  • 它应该可以工作,因为相同的格式它仍在我的语言环境中工作

标签: jsf locale


【解决方案1】:

JSF 使用默认语言环境调用 Integer.toString() 或 Long.toString() 方法。

第一个解决方案:

从您的ServletContextListener 致电Locale.setDefault(myHardcodeLocale);

第二种解决方案

创建自定义格式化程序。您可以使用 facelets 并为数字创建自己的 outputText。

<h:outputText value="#{myController.myNumberValue}">
    <f:convertNumber type="#,###.00"/>
</h:outputText>

【讨论】:

  • 这并不完全正确。 JSF 使用&lt;f:view locale&gt;,当未指定时,它确实默认为Locale#getDefault()。但是,OP已指定。所以这个问题是完全出乎意料的,因为到目前为止提供的代码应该可以工作。因此,要么 OP 使用了一些暴露错误的 JSF impl/version,要么 OP 没有运行它认为正在运行的代码,或者 OP 实际上没有显示 SSCCE。
  • 好的,但是第二种解决方案是独立于 OP 的。根据我的经验,当你启动 jvm 时,你应该覆盖默认的语言环境,时区。你永远不知道,生产中会定义什么。见how do I set the default locale for my JVM?
猜你喜欢
  • 2014-12-12
  • 1970-01-01
  • 1970-01-01
  • 2013-06-14
  • 2013-01-06
  • 1970-01-01
  • 2011-05-27
  • 1970-01-01
  • 2022-01-07
相关资源
最近更新 更多