为不同的区域设置保持相同的DateTime格式

时间:2017-05-10 08:29:35

标签: datetime jsf internationalization

最近,我启动了对JSF应用程序内部化的支持。语言从en-US切换为de-AT后,DateTime格式会相应更改(默认行为)。对于每个支持的语言环境,保持相同的DateTime格式是否是快速解决方案?

应该是DateTimeConverter,还是设置的一部分(faces-config.xml)?

1 个答案:

答案 0 :(得分:3)

有多种选择。

使用具有固定f:convertDateTime属性

locale

使用具有固定f:convertDateTime属性的locale格式化日期。

<h:outputText value="#{someBean.dateField}" >
    <f:convertDateTime pattern="..."
                       locale="#{applicationScopedBean.fixedLocale}" />
</h:outputText>

来自属性文档:

  

Locale在格式化或解析期间使用其预定义的日期和时间样式。如果未指定,将使用Locale返回的FacesContext.getViewRoot().getLocale()。值必须是一个计算结果为java.util.Locale实例的VB表达式,或一个有效作为第一个参数传递给构造函数String的{​​{1}}。空字符串作为第二个参数传递。

覆盖java.util.Locale(String language, String country)

中的f:convertDateTime转换器

您可以使用faces-config.xml覆盖faces-config.xml中的转换器。您可以按ID或类覆盖。在这种情况下,ID是要走的路。 <converter>的ID为f:convertDateTime,因此您可以执行以下操作:

javax.faces.DateTime

实施自定义转换后,您应该扩展<converter> <converter-id>javax.faces.DateTime</converter-id> <converter-class>org.example.MyDateTimeConverter</converter-class> </converter> 。如果您正好使用PrimeFaces,请展开javax.faces.convert.DateTimeConverter

现在只需硬编码语言环境(例如德语):

org.primefaces.convert.DateTimeConverter

现在您可以使用它(请注意视图区域设置设置为荷兰语):

public class MyDateTimeConverter extends DateTimeConverter
{

  public MyDateTimeConverter()
  {
    setLocale(Locale.GERMAN);
  }

}

将输出:

  

Mittwoch 10 Mai 2017