我有几周前部署的Grails 2.2.4制作应用程序,在那个应用程序中我有这样的域类:
课程日期{
Date mDate; static constraints = { mDate(nullable:false, blank:false, max: new Date()); }
}
所需行为: 当用户从此类创建对象时,属性mDate不应大于今天的日期。
真实行为: 当用户尝试创建对象时,应用程序会告诉她属性mDate不应大于部署日期。
示例:
部署日期:01 / Aug / 2015
用户尝试创建属性为mDate = 02 / Aug / 2015的对象,然后系统抱怨它不应大于2015年8月1日。
发生了什么事?
答案 0 :(得分:4)
Grails只评估一次约束,然后使用相同的值。使用new Date()
而不是常量值时会出现问题。
在Declaring Constraints下的Grails文档中:
请注意,约束仅被评估一次,这可能与依赖于像java.util.Date实例之类的值的约束相关。
class User {
...
static constraints = {
// this Date object is created when the constraints are evaluated, not
// each time an instance of the User class is validated.
birthDate max: new Date()
}
}
而是使用自定义验证器:
class User {
...
static constraints = {
birthDate validator: { it < new Date() }
}
}