Grails - Как я могу получить одно сообщение об ошибке - PullRequest
1 голос
/ 16 июля 2010

Как получить одно сообщение об ошибке от командного объекта в граалях?

все примеры, которые я вижу, используют аналогично commandObject.errors.allErrors (), но ничего, если я хочу, чтобы единственное сообщение об ошибке считывалось в контроллер и впоследствии передавалось в представление.

Есть идеи?

Ответы [ 3 ]

1 голос
/ 29 апреля 2013

Нет хелера, который можно получить как одно сообщение об ошибке.Вот что я использую:

Для JSON:

def errors = user.errors.allErrors.collect{
    ['message': messageSource.getMessage(it, null) , 
     'field': it.getField(), 
     'badValue': it.getRejectedValue()
    ]
}

render(status:400, contentType: "application/json"){
    [message:'Failed to save', 'errors': errors]
}

Для HTML (для большинства пользователей сообщения об ошибках не являются техническими):

flash.message = user.errors.allErrors.collect{
    "Field:${it.getField()}| Error: ${messageSource.getMessage(it, null)}, value:${it.getRejectedValue()}"
}.join('\n')
0 голосов
/ 07 мая 2015

Как вы хотите отправить одно сообщение об ошибке в качестве ответа взгляните на пружину Errors интерфейс здесь .

Для всех ошибок в одном сообщении об ошибке проверьте @Nix answer

И

Для определенного поля вы можете использовать следующее

Example: Consider field `status` having with invalid value. 

if (instance.errors.hasFieldErrors('status')) {
    instance.errors.rejectValue("status", "error.code.for.status",
        [message(code: 'instance.label', default: 'Test Domain')] as Object[],
        "Custom error message")
    render(view: "edit", model: [instance: instance])
    return
}

OR

// Will render error message corressponding to message code passed
if (instance.errors.hasFieldErrors('status')) {
    instance.errors.rejectValue("status", "error.code.for.status")
    render(view: "edit", model: [instance: instance])
    return
}

OR

// Will render error message corressponding to message code passed
// and if not present will render default custom message passed.
if (instance.errors.hasFieldErrors('status')) {
    instance.errors.rejectValue("status", "error.code.for.status",
        "Custom error message")
    render(view: "edit", model: [instance: instance])
    return
}
0 голосов
/ 19 июля 2010

Я не уверен, какую «единственную» ошибку вы хотите получить (для одного поля?), Но просто хотел указать, что commandObject.errors имеет тип org.springframework.validation.Errors, поэтому просто взгляните на методы, объявленные в этом интерфейсе. Существуют методы получения полевых ошибок, глобальных ошибок и т. Д. Если бы вы могли уточнить свой вопрос, мы, возможно, можем предоставить более подробный ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...