显示Grails字段错误

显示Grails字段错误,grails,error-handling,grails-validation,Grails,Error Handling,Grails Validation,有人知道我如何在下面的示例中打印出字段错误 对于每个有错误的项目,我希望打印在messages.properties文件中定义的自定义错误消息 目前,所有这些只是打印默认错误代码 item.errors?.allErrors?.each{ println it.toString() } 我见过其他一些例子,在这些例子中,你可以查找一个字段的错误代码 it.getFieldError('title').code 但是我想将默认消息转换为新的错误消息并打印出来。您需要访问messageS

有人知道我如何在下面的示例中打印出
字段错误

对于每个有错误的项目,我希望打印在messages.properties文件中定义的自定义错误消息

目前,所有这些只是打印默认错误代码

item.errors?.allErrors?.each{ 
  println it.toString() 
}
我见过其他一些例子,在这些例子中,你可以查找一个字段的错误代码

it.getFieldError('title').code

但是我想将默认消息转换为新的错误消息并打印出来。

您需要访问messageSource bean,例如使用

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

将def messageSource(在控制器或服务中)放入,感谢此操作成功。item.errors?.allErrors?.each{println messageSource.getMessage(it,null)};我还发现了一个很好的链接,它解释了这个更好的Burt,自2010年以来,它似乎并没有变得更直接。单个错误对象没有返回特定消息的
message
字段,而不必导入bean并调用静态方法,这有什么原因吗?