我尝试将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中找到任何用于注册新约束的文档。
答案 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)