【问题标题】:Date value received by validation method has changed验证方法收到的日期值已更改
【发布时间】:2012-11-27 11:57:04
【问题描述】:

我几乎完成了一个动态构建字段并使用正则表达式设置数据类型验证的页面,但在周五我开始将字段绑定到实际数据类型而不仅仅是字符串时遇到了一个问题。问题在于与日期相关的值(java.util.Date)!!

在测试页面和验证时,我正在使用日期填充日期字段,例如 2012 年 12 月 12 日。当它到达 validate 方法时,它显示为 Tue Dec 11 19:00:00 EST 2012。显示的日期总是提前一天 @ 19:00:00 并且格式完全不同。

如何才能以我指定的格式发送日期?

...还有...

关于为什么日期值也不正确的任何想法?

在页面上构建日期字段:

<h:inputText id="inputField2" tabindex="#{field.fieldDefinition.fieldOrder}" value="#{field.val}"  validator="#{field.fieldDefinition.validate}" validatorMessage="#{field.fieldDefinition.validationMessage}">
    <f:convertDateTime pattern="MM/dd/yyyy" />
</h:inputText>

被调用的验证方法:

public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException { 
    if (getDataType() != null && getDataType().getValidationExpression() != "") {
        regexValidator = new RegexValidator(); 
        regexValidator.setPattern(getDataType().getValidationExpression()); 
        regexValidator.validate(context, component, value); 
    } 
} 

一如既往...感谢您的帮助。

问候,

迈克

【问题讨论】:

    标签: validation jsf-2


    【解决方案1】:

    正则表达式验证器接受String,而不是Date。摆脱那个验证器,Date 根本不需要它。如果输入格式无效,您已经收到来自&lt;f:convertDateTime&gt; 的转换错误,并且验证器将永远不会被命中。

    至于为什么格式不同,那只是Date#toString()的默认格式,另见javadoc。当您执行System.out.println(date) 时,正是这种格式。但是,如果您摆脱了验证器,则无需担心这一点。

    至于为什么提前一天,那只是因为JSF默认使用GMT时区,而Date#toString()默认使用系统平台默认时区,另见javadoc。但是,如果您摆脱了验证器,则无需担心这一点。

    【讨论】:

    • 感谢 BalusC。删除 Date 的验证器后,它仍然在数据库中显示了错误的日期,即屏幕上输入的内容。我最终不得不将 javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE 添加到 web.xml 中,这一切都正确..至少现在。再次感谢您的帮助!!!
    • 不客气。至于时区问题,如果您还将日期时间的时间部分存储在数据库中,即使您只获取日期时间的日期部分,这种情况仍然会发生。
    【解决方案2】:

    您应该在&lt;f:convertDateTime /&gt; 中设置时区,请查看此帖子了解更多详细信息: f:convertDateTime displays wrong Date

    【讨论】:

    • 我在 h:convertDateTime 中添加了 locale="en_US",但对更改的时间没有影响。
    猜你喜欢
    • 2013-12-15
    • 2018-08-26
    • 2013-09-30
    • 1970-01-01
    • 1970-01-01
    • 2018-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多