2016-12-10 173 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)