最近,我启动了对JSF应用程序内部化的支持。语言从en-US
切换为de-AT
后,DateTime
格式会相应更改(默认行为)。对于每个支持的语言环境,保持相同的DateTime
格式是否是快速解决方案?
应该是DateTimeConverter
,还是设置的一部分(faces-config.xml
)?
答案 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