【问题标题】:Displaying Grails Field Errors显示 Grails 字段错误
【发布时间】:2011-03-16 21:35:08
【问题描述】:

有人知道我如何在下面的示例中打印出fieldError

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

目前所做的只是打印默认错误代码

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

我看过其他示例,您可以在其中查找字段的错误代码,例如

it.getFieldError('title').code

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

【问题讨论】:

    标签: grails error-handling grails-validation


    【解决方案1】:

    您需要访问 messageSource bean,例如与

    def messageSource
    

    在您的控制器或服务中。然后您可以使用

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

    【讨论】:

    • 把 def messageSource(在控制器或服务中)谢谢这个工作。 item.errors?.allErrors?.each{ println messageSource.getMessage(it, null) };我还找到了一个很好的链接,可以更好地解释这一点johnrellis.blogspot.com/2010/02/…
    • Burt,自 2010 年以来,这似乎并没有变得更简单。是否有原因是各个错误对象没有返回特定消息的 message 字段而不是导入一个bean并调用一个静态方法?
    【解决方案2】:

    具有更好性能的更简单的解决方案是;

    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.messagemessages.properties 中的本地字符串。在此特定示例中,此消息的内容类似于...

    modified.invalid.validator.message=Property [{0}] of [{1}] does not pass validation
    

    【讨论】:

      猜你喜欢
      • 2012-06-12
      • 2014-04-05
      • 1970-01-01
      • 2017-07-07
      • 2011-11-25
      • 1970-01-01
      • 2016-04-05
      • 1970-01-01
      • 2020-08-26
      相关资源
      最近更新 更多