Grails自定义错误消息的问题

时间:2010-07-14 21:25:11

标签: grails groovy grails-plugin grails-validation

我目前正在尝试在grails中为默认约束指定自定义错误消息,但到目前为止,我回来的只是默认错误消息。

我知道我必须编辑grails-app / i18n / messages.properties文件

如果我更改以下默认错误代码消息,它将正确显示新错误消息

default.blank.message=Property [{0}] of class [{1}] cannot be blank

但是,这不是我想要做的。我需要更细粒度的错误报告,并且有多个字段可以为空白等。我希望能够做的是,为类中的每个字段显示自定义消息

package com.mycompany.myapp

class Test{

 String name
 def constraints = {
 name(nullable:false, blank:false)
 }
}

(以下代码附加到messages.properties的末尾)

test.name.blank=Name cannot be blank
test.name.nullable=Name cannot be nullable

根据grails文档,这应该可以正常工作,无论是否包名称 - className.propertyName.blank

grails.org/doc/latest/(约束部分)& (第7.4节 - 验证和国际化)

我尝试了所有可以考虑的组合,但它始终显示自定义消息

我也尝试过安装grails i18n模板插件

http://www.grails.org/I18n+Templates+Plugin

为我自动生成错误代码。我将新的错误代码附加到现有messages.properties文件的末尾,但我仍然收到默认的错误消息。

但是,插件生成的错误代码有所不同。

而不是grails doc中指定的格式 - test.name.null = ......,它会自动生成test.name.null.error =自定义消息

我还尝试完全删除默认错误消息,但它们仍然显示

如果有人之前遇到过这个问题,我将不胜感激,任何人都可以给予我任何帮助

提前致谢

5 个答案:

答案 0 :(得分:18)

把def messageSource(在控制器或服务中)

item.errors?.allErrors?.each{ 
println  messageSource.getMessage(it, null)
};

我还找到了一个很好的链接来解释这个更好的

http://johnrellis.blogspot.com/2010/02/retrieve-grails-domain-errors-from.html

答案 1 :(得分:7)

好吧,文档向您展示了如何覆盖其中一个默认验证约束(空白,可空,最小,最大,大小,范围等)的消息的示例。但它没有告诉你查看每个约束的文档,并在底部显示了使用什么样的关键:

错误代码: className.propertyName.size.toosmall className.propertyName.size.toobig

约束尺寸 http://grails.org/doc/latest/ref/Constraints/size.html

所以,对于

package com.example
class User {
    String username

    static constraints = {
        username  size:5..15
    }
}

使用:

com.example.User.username.size.toosmall =哟那里!太小:类[{1}]的[{0}]值[{2}]不在[{3}]到[{4}]的有效大小范围内

com.example.User.username.size.toobig =哟那里!太大:类[{1}]的[{0}]值[{2}]不在[{3}]到[{4}]的有效大小范围内

答案 2 :(得分:0)

可能是您的约束不是静态的 - 应该将其指定为“static constraints = {...”

另请注意,nullable默认为false,因此您无需指定。

答案 3 :(得分:0)

我在messages.properties

中使用完全限定的类名
com.shareyourlove.User.password.blank=Some custom message

答案 4 :(得分:0)

这对我有用

com.model.Customer.name.nullable.error = Custom message

而不是

com.model.Customer.name.blank = Custom message