Grails域验证器不工作

Grails域验证器不工作,grails,grails-domain-class,Grails,Grails Domain Class,我的域中有以下字段 @BindingFormat('mm/dd/yyyy hh:mm a') Date advertiseDate @BindingFormat('mm/dd/yyyy hh:mm a') Date closeDate @BindingFormat('mm/dd/yyyy hh:mm a') Date letDate closeDate validator: { value, contract -> value >= contract.advertiseDate

我的域中有以下字段

@BindingFormat('mm/dd/yyyy hh:mm a')
Date advertiseDate

@BindingFormat('mm/dd/yyyy hh:mm a')
Date closeDate

@BindingFormat('mm/dd/yyyy hh:mm a')
Date letDate

closeDate validator: { value, contract -> value >= contract.advertiseDate }      
letDate validator: { value, contract -> value >= contract.closeDate }
我在messages.properties文件中有验证错误

project.Contract.closeDate.validator.error = Close Date cannot be before Advertise Date
project.Contract.letDate.validator.error = Let Date cannot be before Close Date
由于某种原因,我的验证器似乎无法工作。我没有收到任何错误我只是没有收到我的验证错误

这些验证在我使用jquery datepicker时只使用了mm/dd/yyyy格式,但一旦我切换到jquery datetimepicker时使用了mm/dd/yyyy hh:mm格式,它就相当有效了。我唯一做的另一个改变是在普惠制中加入了如下格式

value="${formatDate(format:"MM/dd/yyyy hh:mm a", date:contractInstance?.letDate)}"  

如果您有任何帮助或想法,我们将不胜感激。

您需要验证程序中的以下逻辑

返回键将用于查找该特定字段的消息


注意上面的消息键的更改,在无效情况下,这些消息键与返回键匹配。我假设project是消息键中的包名,并且日期使用@BindingFormat正确绑定。

首先要确认是否调用了它们。这样,您就可以知道是验证器中的逻辑出了问题,还是停止了对验证器表单的调用。我建议将println添加到验证器中,以便在日志中查看是否正在调用它。类似于:println'In closeDate validator';月份应使用大写字母M:@BindingFormat'MM/dd/yyyy hh:MM a'
closeDate validator: { value, contract -> 
    if ( value < contract.advertiseDate ) return ['invalid']
}      
letDate validator: { value, contract -> 
    if ( value < contract.closeDate ) return ['invalid']
}
//messages.properties
project.contract.closeDate.invalid = Close Date cannot be before Advertise Date
project.contract.letDate.invalid = Let Date cannot be before Close Date