Grails没有使用message.properties进行错误消息?

时间:2011-04-26 15:04:15

标签: spring grails localization groovy internationalization

我正在尝试使用简单错误代码的本地化形式,但我似乎无法按原样进行参数化。在我的集成测试中,我有这个,只是为了说明问题:

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

2 个答案:

答案 0 :(得分:3)

您可以使用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
    }
  }
}

答案 1 :(得分: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)
}
相关问题