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 中找不到任何用于注册新约束的文档。

4

2 回答 2

1

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

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

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

于 2017-01-05T02:58:22.387 回答
0

另一种方法是在 grails 2.xx 中创建runtime.groovy并注册config约束:runtime.groovy

org.codehaus.groovy.grails.validation.ConstrainedProperty.registerNewConstraint('description', my.validation.DescriptionConstraint)
于 2018-02-27T11:35:11.847 回答