Вопрос

Кто-нибудь знает, как я могу получить 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top