Grails: как обрабатывать валидацию JSR 303 - PullRequest
3 голосов
/ 15 февраля 2012

Я использую классы сущностей Java как доменные объекты в приложении Grails.В этих классах есть аннотации проверки JSR 303 (@Size, @NotEmpty и т.Поле NotEmpty), я получаю страницу ошибки со следующим:

/webcall-account-manager-2/company/save
Class
javax.validation.ConstraintViolationException
Message
Validation failed for classes [com.rcslabs.webcall.server.model.Company] during persist time for groups [javax.validation.groups.Default, ] List of constraint violations:[ ConstraintViolationImpl{interpolatedMessage='may not be empty', propertyPath=name, rootBeanClass=class com.rcslabs.webcall.server.model.Company, messageTemplate='{org.hibernate.validator.constraints.NotBlank.message}'} ]

Around line 27 of grails-app/controllers/com/rcslabs/webcall/server/model/CompanyController.groovy
24:    def save() {
25:        def companyInstance = new Company()
26:     companyInstance.properties = params
27:        if (!companyInstance.save(flush: true)) {
28:            render(view: "create", model: [companyInstance: companyInstance])
29:            return
30:        }

Trace
    Line | Method
->>  251 | call      in org.grails.datastore.gorm.InstanceMethodInvokingClosure
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|     27 | save      in CompanyController.groovy
|   1110 | runWorker in java.util.concurrent.ThreadPoolExecutor
|    603 | run       in java.util.concurrent.ThreadPoolExecutor$Worker
^    679 | run . . . in java.lang.Thread

Что можно сделать, чтобы правильно обработать его (окно сообщения над полем)?

1 Ответ

0 голосов
/ 15 февраля 2012

Не уверен на 100%, поскольку я никогда не использовал JSR 303 и Grails, но вы, вероятно, могли бы вызвать .validate перед сохранением.Когда вы вызываете .save, он запускает проверку, и это вызывает исключение.Поэтому попробуйте выполнить вызов validate вручную, и тогда вы сможете вернуть ошибки, аналогичные тем, которые вы используете в блоке if.

...