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.
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)
}
}
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