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

时间:2012-12-21 15:35:35

标签: datetime jsf timezone converter

我使用以下JSF转换器作为日期输入。

<f:convertDateTime dateStyle="medium" timeZone="EST" type="date" />

我想集中转换器,以便我可以在一个地方更改时区或日期样式。怎么可能?

我可以覆盖<f:convertDateTime>吗?

1 个答案:

答案 0 :(得分:10)

唯一的方法是依赖系统默认时区(而不是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}" />

可以DateTimeConverter类扩展到<f:convertDateTime>后面,如下所示,以获得已设置所有属性的转换器,但是您将无法声明其他属性从视图方面看,没有将其包装在自定义标记中(需要TagHandler和一些XML样板文件):

@FacesConverter("defaultDateConverter")
public class DefaultDateConverter extends DateTimeConverter {

    public DefaultDateConverter() {
        setDateStyle("medium");
        setType("date");
        setTimeZone(TimeZone.getTimeZone("EST"));
    }

}

将其用作<f:converter converterId="defaultDateConverter" />