【问题标题】:Grails not using message.properties for Errors messages?Grails 不使用 message.properties 来获取错误消息?
【发布时间】:2011-04-26 15:04:15
【问题描述】:

我正在尝试获取简单错误代码的本地化形式,但我似乎无法让它按应有的参数化。在我的集成测试中,我有这个,只是为了说明问题:

for( FieldError error : errors.fieldErrors )
{
    println error.toString()
}

在一些手动装订中,我有这个:

myObject.errors.rejectValue("field1.field2", "typeMismatch.java.lang.Integer", [value] as Object[], "")

但是当我打印时,我得到了这个:

Field error in object 'com.me.MyObject' on field 'field1.field2': rejected value [1];   
codes   
[typeMismatch.java.lang.Integer.com.me.MyObject.field1.field2,typeMismatch.java.lang.Integer.field1.field2,typeMismatch.java.lang.Integer.field2,typeMismatch.java.lang.Integer.int,typeMismatch.java.lang.Integer]

为什么不使用来自message.properties 的字符串? typeMismatch.java.lang.Integer=Property {0} must be a valid number

【问题讨论】:

  • "field1.field2" 引用让我怀疑 - 它是有效的字段引用吗?它是一个嵌套字段吗?例如,我们只使用"field2"。除此之外,绝对相似的代码对我有用。您的messages.properties 中有明确的typeMismatch.java.lang.Integer 消息吗?

标签: spring grails localization groovy internationalization


【解决方案1】:

您可以使用 ataylor 建议的 <g:message> 标签或 Grails 定义的 MessageSource Spring bean。下面显示了在控制器中使用它的示例

import org.springframework.context.MessageSource
import org.springframework.web.servlet.support.RequestContextUtils as RCU

class SomeController {

  MessageSource messageSource

  def someAction = {SomeObject someObject ->

    for (error in someObject.errors) {

      // lookup the error message
      Locale locale = RCU.getLocale(request)
      String errorMsg = messageSource.getMessage(error)

      println errorMsg
    }
  }
}

【讨论】:

    【解决方案2】:

    通过g:message 标记传递您的错误以从message.properties 获取消息。在控制器中,你可以这样写:

    for( FieldError error : errors.fieldErrors )
    {
        println g.message(error: error)
    }
    

    或者,您可以使用messageSource spring bean:

    def messageSource
    
    for( FieldError error : errors.fieldErrors )
    {
        def locale = RequestContextUtils.getLocale(request)
        println messageSource.getMessage(error, locale)
    }
    

    【讨论】:

    • +1 就像我发布我的一样,您似乎使用 Spring bean 信息更新了您的答案。我很想删除我的,但我暂时先保留它,因为我认为它增加了一些非常边缘的额外细节
    猜你喜欢
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 2018-05-15
    • 2014-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    相关资源
    最近更新 更多