Question

Does anybody know how I could get the fieldError to print out in the example below.

for each item with an error, I would like to print custom error messages that I have defined in the messages.properties file

at the moment all this does is print the default error codes

item.errors?.allErrors?.each{ 
  println it.toString() 
}

I have seen other examples where you can lookup an error code for a field e.g.

it.getFieldError('title').code

but I would like to convert the default message into my new error message and print that.

Was it helpful?

Solution

You need access to the messageSource bean, e.g. with

def messageSource

in your controller or service. Then you can access the messages with

def locale = Locale.getDefault()
for (fieldErrors in bean.errors) {
   for (error in fieldErrors.allErrors) {
      String message = messageSource.getMessage(error, locale)
   }
}

OTHER TIPS

A somewhat simplier solution with a better performance would be;

MessageSource messageSource //Inject the messageSource class

e.errors.allErrors.each {
  String message = messageSource.getMessage(it, Locale.default)
}

OR

If you want to deal only with field errors:

e.errors.fieldErrors.each {
   String message = messageSource.getMessage("modified.invalid.validator.message", [it.field, 'message'] as Object[], Locale.default))
}

Where modified.invalid.validator.message is the local string in your messages.properties. In this particular example, this message reads something like...

modified.invalid.validator.message=Property [{0}] of [{1}] does not pass validation
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top