在Grails Prod App上获得糟糕的约会

时间:2015-09-03 18:23:30

标签: date grails

我有几周前部署的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日。

发生了什么事?

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() }
    }
}