日期验证的 Grails 最小约束
Posted
技术标签:
【中文标题】日期验证的 Grails 最小约束【英文标题】:Grails min constraint for date validation 【发布时间】:2011-05-04 03:06:10 【问题描述】:我是 grails 和 groovy 的新手。我有一个带有开始和结束日期的项目域类。我想设置一个约束,指定结束日期需要大于开始日期(然后项目的另一个子对象需要使用父项目的日期验证其开始日期和结束日期)。这是否可能与最小约束或我必须把它放在别处?唯一约束确实允许以这种方式链接两个属性,希望最小/最大约束允许这样做。 我试过了
startDate(blank:false)
endDate(blank:false, min:'startDate')
它会抛出一个错误,提示属性 startDate 在 Project 上不可用
【问题讨论】:
我的回答是假设endDate
被定义为java.util.Date
。它是否正确?如果没有,请说明它是什么,我会相应地更新我的答案。
是的,这是一个常规日期。希望 min 约束也适用于此。感谢您的回答 :) 所以, min 仅适用于整数,对吗?
好吧,min
可以很好地应用于Date
值。但是,我不相信您可以在 min
的约束定义中使用动态值(即另一个字段值),因为 constraints
是静态闭包。不过,您可以使用endDate(min: new Date())
,没有任何问题。
【参考方案1】:
尝试使用自定义验证器:
static constraints =
endDate(validator: val, obj ->
val?.after(obj.startDate)
)
val
是字段的值,obj
是对正在验证的对象的引用。闭包可以包含您需要的任何逻辑,因此您可以按照您在问题中描述的方式扩展您的验证(通过访问您使用 obj
引用的子对象)。
自定义验证器非常灵活。看看the documentation。理想情况下,您需要返回自定义消息;如何做到这一点也可以在上面链接的文档中找到。
【讨论】:
以上是关于日期验证的 Grails 最小约束的主要内容,如果未能解决你的问题,请参考以下文章
Grails 使用 Spring Security Core Plugin 测试用户角色自定义验证约束