如何在JSF中集中<f:convertDateTime>时区?



我使用以下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" />

相关内容

  • 没有找到相关文章

最新更新