13

我目前正在尝试在 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 文档中指定的格式 - test.name.null=......,它会自动生成 test.name.null.error=Custom Message

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

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

提前致谢

4

5 回答 5

18

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

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

我还找到了一个很好的链接,可以更好地解释这一点

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

于 2010-07-16T23:02:28.290 回答
8

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

错误代码:className.propertyName.size.toosmallclassName.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 =哟!太小:值为 [{2}] 的类 [{1}] 的 [{0}] 不在 [{3}] 到 [{4}] 的有效大小范围内

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

于 2013-12-04T21:41:16.630 回答
0

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

另请注意,可为空的默认值为 false,因此您无需指定。

于 2010-07-14T22:42:01.957 回答
0

我在我的 messages.properties 中使用完全限定的类名

com.shareyourlove.User.password.blank=Some custom message
于 2010-07-15T06:08:37.963 回答
0

这对我有用

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

代替

com.model.Customer.name.blank = Custom message
于 2016-03-24T18:47:35.957 回答