2016-12-10 5 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 0,3, Когда я ставлю выше команду (и удалить org.codehaus.groovy от имени пакета) в /conf/application.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 g из класса Grails-validation все же получил ту же ошибку.

Все плагины проверки, которые я нашел, были давно оставлены до 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

Вызов ConstrainedProperty.registerNewConstraint in /grails-app/init/BootStrap.groovy works. (проверено на 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. Он работает для запуска приложения. Однако он не работает с тестом интеграции.

0

Другим способом вы можете создать runtime.groovy под config и зарегистрировать свои ограничения в runtime.groovy как в Grails 2.xx:

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