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