注册自定义约束

时间:2016-12-10 03:54:05

标签: grails grails3.2.0

我尝试将Grails 2.3.7项目升级到Grails 3.2.3。在2.3.7中,我使用自定义约束并使用以下命令在/conf/Config.groovy中注册:

org.codehaus.groovy.grails.validation.ConstrainedProperty.registerNewConstraint('description', my.validation.DescriptionConstraint)

然后我可以在域中使用这样的东西:

static constraints = {
  approvedDate(description: '>= applyDate')
}

但是,在Grails 3.2.3中,当我在/conf/application.groovy中输入上面的命令(并从包名中删除org.codehaus.groovy)时出现以下错误:

Error occurred running Grails CLI: No signature of method: groovy.util.ConfigObject.registerNewConstraint() is applicable for argument types: (groovy.util.ConfigObject, groovy.util.ConfigObject) values: [[:], [DESCRIPTION_CONSTRAINT:[:]]]

我注意到Grails 3中的验证类有所改变。但是使用Grails-validation中的约束类仍然会出现相同的错误。

我发现的所有验证插件在Grails 3之前都被遗弃了。而且我无法在Grails 3.2中找到任何用于注册新约束的文档。

2 个答案:

答案 0 :(得分:1)

在/grails-app/init/BootStrap.groovy中调用ConstrainedProperty.registerNewConstraint有效。 (用Grails 3.2.4测试)

class BootStrap {
  def init = { servletContext ->
    grails.validation.ConstrainedProperty.registerNewConstraint('description', my.validation.DescriptionConstraint)
    // The rest of bootstrap code
  }
}

请注意。以前,我在/grails-app/init/Application.groovy中从main()调用它。它适用于运行应用程序。但是,它不适用于集成测试。

答案 1 :(得分:0)

另一种可以在runtime.groovy下创建config并在runtime.groovy中注册约束的方法,如grails 2.x.x:

org.codehaus.groovy.grails.validation.ConstrainedProperty.registerNewConstraint('description', my.validation.DescriptionConstraint)