Отображение ошибок полей Grails
-
16-09-2020 - |
Вопрос
Кто-нибудь знает, как я могу получить fieldError
для распечатки в примере ниже.
для каждого элемента с ошибкой я хотел бы распечатать собственные сообщения об ошибках, которые я определил в файле messages.properties.
на данный момент все, что это делает, это печатает коды ошибок по умолчанию
item.errors?.allErrors?.each{
println it.toString()
}
Я видел другие примеры, где вы можете найти код ошибки для поля, например.
it.getFieldError('title').code
но я хотел бы преобразовать сообщение по умолчанию в новое сообщение об ошибке и распечатать его.
Решение
Вам нужен доступ к bean-компоненту messageSource, например.с
def messageSource
в вашем контроллере или сервисе.Затем вы можете получить доступ к сообщениям с помощью
def locale = Locale.getDefault()
for (fieldErrors in bean.errors) {
for (error in fieldErrors.allErrors) {
String message = messageSource.getMessage(error, locale)
}
}
Другие советы
Несколько более простым решением с лучшей производительностью было бы;
MessageSource messageSource //Inject the messageSource class
e.errors.allErrors.each {
String message = messageSource.getMessage(it, Locale.default)
}
ИЛИ
Если вы хотите иметь дело только с ошибками в полях:
e.errors.fieldErrors.each {
String message = messageSource.getMessage("modified.invalid.validator.message", [it.field, 'message'] as Object[], Locale.default))
}
Где modified.invalid.validator.message
это локальная строка в вашем messages.properties
.В этом конкретном примере это сообщение выглядит примерно так...
modified.invalid.validator.message=Property [{0}] of [{1}] does not pass validation