ConvertDateTime没有在web.xml中定义时区

时间:2016-01-19 14:19:06

标签: jsf jsf-1.2 jboss-seam

我使用f:convertDateTime格式化数据表中的dateTime。我在web.xml中设置了以下context参数,以便将时区显式设置为系统时区:

<context-param>
    <param-name>javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE</param-name>
    <param-value>true</param-value>
</context-param>

出于某种原因,我的convertDateTime获得&#34; GMT&#34;总是,但正确的时区是&#34; GMT-03:00&#34;。我在测试课中尝试过这个来查看我的时区:

System.out.println(TimeZone.getDefault().getDisplayName());

这给了我&#34; GMT-03:00&#34;。

我使用JSF 1.2和JBoss Seam 2.2,调用jboss-seam DateTimeConverter进行转换,我不知道这是不是问题。

1 个答案:

答案 0 :(得分:3)

  

我正在使用JSF 1.2

在JSF 2.0中引入了上面提到的上下文参数。它在JSF 1.x中不可用。另见a.o. Set a default time zone for f:convertDateTime。换句话说,它根本就没用过。将其移除以避免混淆。

你有两个选择:

  1. 在每个timeZone中明确指定<f:convertDateTime>

    <h:xxx ...>
        <f:convertDateTime ... timeZone="GMT-3" />
    </h:xxx>
    

    如果需要,可以作为应用程序范围的bean属性。

    <h:xxx ...>
        <f:convertDateTime ... timeZone="#{config.timeZone}" />
    </h:xxx>
    
  2. 使用新的默认时区(和其他属性)扩展日期时间转换器。

    public class DefaultDateTimeConverter extends DateTimeConverter {
    
        public DefaultDateTimeConverter() {
            setType("both");
            setTimeZone(TimeZone.getTimeZone("GMT-3"));
        }
    
    }
    

    <converter>
        <converter-id>defaultDateTimeConverter</converter-id>
        <converter-class>com.example.DefaultDateTimeConverter</converter-class>
    </converter>
    

    然后用它替换<f:convertDateTime>

    <h:xxx ... converter="defaultDateTimeConverter" />