Grails域验证器无法正常工作

时间:2015-01-20 22:20:57

标签: 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 }      
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

出于某种原因,我的验证员似乎没有工作。我没有收到任何错误,我只是没有收到验证错误。

当我使用仅具有mm/dd/yyyy格式的jquery日期选择器时,这些验证一次正在工作但是一旦我切换到具有mm/dd/yyyy hh:mm a格式的jquery datetimepicker,它就非常有效。我做的唯一其他改变是在gsp中包含一个格式,如下面的那个

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

非常感谢任何帮助或想法。

1 个答案:

答案 0 :(得分:0)

您需要在validator

中使用以下逻辑
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

返回密钥将用于查找该特定字段的消息。

请注意上述消息键的更改,如果出现无效情况,则会对返回键进行更改。我假设project是消息密钥中的包名称,使用@BindingFormat正确绑定日期。