0

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

在测试页面和验证时,我正在使用日期填充日期字段,例如 2012 年 12 月 12 日。当它到达验证方法时,它显示为 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); 
    } 
} 

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

问候,

麦克风

4

2 回答 2

1

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

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

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

于 2012-12-10T12:10:04.683 回答
0

您应该在 中设置时区,<f:convertDateTime />查看这篇文章了解更多详细信息: f:convertDateTime 显示错误的日期

于 2012-12-10T06:49:36.463 回答