验证方法收到的日期值已更改

时间:2012-12-10 03:45:17

标签: validation jsf-2

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

在测试页面和验证时,我使用日期(例如12/12/2012)填充日期字段。当它到达验证方法时,它将显示为2012年12月11日星期二19:00:00。显示的日期总是提前一天@ 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); 
    } 
} 

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

此致

麦克

2 个答案:

答案 0 :(得分:1)

正则表达式验证程序接受String,而不是Date。摆脱那个验证器,你根本不需要它Date。如果输入格式无效,您已经从<f:convertDateTime>获得了转换错误,并且验证器根本不会被点击。

至于为什么格式不同,这只是Date#toString()的默认格式,另请参阅javadoc。当你执行System.out.println(date)时,正是这种格式。但是如果你摆脱了验证器,你就不必担心这个问题。

至于为什么它是前一天,这只是因为JSF默认使用GMT时区,但Date#toString()默认使用系统平台默认时区,另请参阅javadoc。但是如果你摆脱了验证器,你就不必担心这个问题。

答案 1 :(得分:0)

您应该在<f:convertDateTime />中设置时区,详情请看这篇文章: f:convertDateTime displays wrong Date