2016-12-10 176 views
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.然而,usin来自Grails-validation的g约束类仍然有相同的错误。

我发现的所有验证插件在Grails 3之前就被抛弃了。而且在Grails 3.2中找不到任何文档来注册新的约束。

+0

试试这个: 'org.codehaus.groovy.grails.validation.ConstrainedProperty。 registerNewConstraint('description',my.validation.DescriptionConstraint.class)' [DOC](http://docs.grails.org/3.1.x/api/grails/validation/ConstrainedProperty.html#registerNewConstraint) – zfChaos

+0

@zfChaos谢谢。但是,仍然有相同的错误。此外,'import grails.validation.ConstrainedProperty'得到'无法解析类grails.validation.ConstrainedProperty'它看起来像这个文件还没有在Grails环境中。我试图在'/ grails-app/init/Application.groovy'中注册它。那里没有错误。但是,我正在移植项目的其他部分,因此我无法测试它是否可用。 – Meam

回答

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()中调用它。它适用于运行应用程序。但是,它不适用于集成测试。

0

的另一种方式,你可以创建configruntime.groovy并注册在runtime.groovy的约束Grails中为2.xx:

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