我使用以下JSF转换器作为日期输入。
<f:convertDateTime dateStyle="medium" timeZone="EST" type="date" />
我想集中转换器,以便我可以在一个地方更改时区或日期样式。这怎么可能呢?
可以重写<f:convertDateTime>
吗?
唯一的方法是依赖系统默认时区(而不是JSF内部使用的UTC)。因此,如果您对生产运行时环境有100%的控制权,并且生产系统平台时区是EST,那么只需将以下上下文参数添加到web.xml
:
<context-param>
<param-name>javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE</param-name>
<param-value>true</param-value>
</context-param>
这样,JSF将使用TimeZone#getDefault()
获得的系统平台时区作为转换器的默认时区,而不是UTC。
如果您无法控制它,那么您最好的选择是创建一个应用程序范围的bean来保存该属性并引用它:
<f:convertDateTime ... timeZone="#{app.timeZone}" />
您可以扩展<f:convertDateTime>
后面的DateTimeConverter
类,如下所示,以便获得已设置所有属性的转换器,但是如果不将其包装在自定义标记(需要TagHandler
和一些XML模板)中,则无法从视图端声明其他属性:
@FacesConverter("defaultDateConverter")
public class DefaultDateConverter extends DateTimeConverter {
public DefaultDateConverter() {
setDateStyle("medium");
setType("date");
setTimeZone(TimeZone.getTimeZone("EST"));
}
}
设置为<f:converter converterId="defaultDateConverter" />