我有多个域对象,其名称的开始和结束日期不同。我想创建一个共享的自定义验证器,该验证器接受两个日期并对其进行验证。
所有文档似乎都指出验证程序闭包中的第二个参数是当前对象。有没有办法做到以下几点?如果是这样,则域对象中的约束关闭看起来如何?
grails.gorm.default.constraints = {
'*'(nullable: true)
endDateValidator(
validator: { endDateValue, startDateValue ->
if(!(endDateValue?.after(startDateValue))){
return 'end.date.before.start.date.error'
}
else{
return true
}
}
)
}
我想您仍然需要为每个域类创建一个验证器,因为它们每个都有不同的命名属性。但是,您可以在这些验证器之间共享验证业务逻辑。
示例:
共享验证逻辑将转到static boolean validateDateOrdering(Date first, Date second)
方法,验证器可能看起来像:
fooValidator(
validator: { value, domainInst ->
validateDateOrdering(value, domainInst['bar'])
}
)
barValidator(
validator: { value, domainInst ->
validateDateOrdering(domainInst['foo'], value)
}
)