日期验证的Grails最小约束

日期验证的Grails最小约束,grails,grails-domain-class,grails-validation,Grails,Grails Domain Class,Grails Validation,我是grails和groovy的新手。我有一个带有开始和结束日期的项目域类。我想加入一个约束,指定结束日期必须大于开始日期(然后,project的另一个子对象需要使用父项目的日期验证其startdate和enddate)。这是可能的最小约束,还是我必须把它放在其他地方?“唯一约束”确实允许以这种方式链接两个特性,希望“最小/最大约束”允许这样做。 我试过了 startDate(blank:false) endDate(blank:false, min:'startDate') 它抛出一个错误,

我是grails和groovy的新手。我有一个带有开始和结束日期的项目域类。我想加入一个约束,指定结束日期必须大于开始日期(然后,project的另一个子对象需要使用父项目的日期验证其startdate和enddate)。这是可能的最小约束,还是我必须把它放在其他地方?“唯一约束”确实允许以这种方式链接两个特性,希望“最小/最大约束”允许这样做。 我试过了

startDate(blank:false)
endDate(blank:false, min:'startDate')

它抛出一个错误,表示属性startDate在Project上不可用

请尝试使用自定义验证程序:

static constraints = {
    endDate(validator: { val, obj ->
        val?.after(obj.startDate)
    })
}
val
是字段的值,
obj
是对正在验证的对象的引用。闭包可以包含您需要的任何逻辑,因此您可以按照您在问题中描述的方式扩展验证(通过使用
obj
访问您引用的子对象)


自定义验证器非常灵活。看一看。理想情况下,您希望返回自定义消息;如何做到这一点也可以在上面链接的文档中找到。

我的答案是假设
endDate
被定义为
java.util.Date
。这是正确的吗?如果没有,请说明它是什么,我会相应地更新我的答案。是的,这是一个固定的日期。我希望min约束也适用于此..谢谢你的回答:)那么,min只适用于整数,对吗?嗯,
min
可以很好地应用于
Date
值。但是,我不相信您可以在约束定义中为
min
使用动态值(即另一个字段值),因为
constraints
是一个静态闭包。不过,您可以毫无问题地执行
endDate(min:new Date())