如何在 Grails 3.3 中自定义错误消息?
How to customize error messages in Grails 3.3?
在 GRAILS 中,可以在 i18n/messages.properties 中定义通用错误
default.invalid.validator.message=Property [{0}] of class [{1}] with value [{2}] does not pass custom validation
使用 GSP 文件中的 hasErrors 方法,错误显示如下
Property [eyeColor] of [class org.application.PersonData] with value [brown] does not pass custom validation
是否可以在任何地方定义“属性”和“class”名称的翻译,以便可以友好地显示错误?像
Property [eye color] of [user] with value [brown] does not pass custom validation
类似于 i18n/messages.properties 文件中的设置
org.application.PersonData=user
org.application.PersonData.eyeColor=eye color
Is it possible to define anywhere a translation for "property" and
"class" name so error can be shown in a frienly? something like
是的。您可以根据需要制作错误消息。
在 https://github.com/jeffbrown/geblini18nmessages 查看项目。
package geblini18nmessages
class PersonData {
String name
String eyeColor
static constraints = {
eyeColor validator: { val ->
// valid
if(val in ['blue', 'green', 'brown']) return true
// invalid
return ['personData.eye.color.invalid', val]
}
}
}
personData.eye.color.invalid=Eye color with value [{2}] does not pass custom validation
当验证失败时,该自定义验证器返回 List
。 List
中的第一个元素表示将用于查找验证错误消息的消息键。 List
中的每个后续元素都可以是您想要放入消息中的任意值。在消息中,您可以使用 {2}
、{3}
等变量替换为 List
中的值。 {0}
是正在验证的 属性 的名称。 {1}
是域名 class。 {2}
以及上面的每个后续索引都将对应于您在消息代码后 List
中输入的值。
您显示的消息 ("Property [eye color] of [user] with value [brown] does not pass custom validation"
) 可以通过这样定义 属性 来实现:
personData.eye.color.invalid=Property [eye color] of [user] with value [{2}] does not pass custom validation.
在这种情况下使用 "eye color"
和 "user"
的参数没有意义,因为错误消息仅用于特定域中的特定 属性。
更多信息请见 https://docs.grails.org/4.0.5/ref/Constraints/validator.html。
在 GRAILS 中,可以在 i18n/messages.properties 中定义通用错误
default.invalid.validator.message=Property [{0}] of class [{1}] with value [{2}] does not pass custom validation
使用 GSP 文件中的 hasErrors 方法,错误显示如下
Property [eyeColor] of [class org.application.PersonData] with value [brown] does not pass custom validation
是否可以在任何地方定义“属性”和“class”名称的翻译,以便可以友好地显示错误?像
Property [eye color] of [user] with value [brown] does not pass custom validation
类似于 i18n/messages.properties 文件中的设置
org.application.PersonData=user
org.application.PersonData.eyeColor=eye color
Is it possible to define anywhere a translation for "property" and "class" name so error can be shown in a frienly? something like
是的。您可以根据需要制作错误消息。
在 https://github.com/jeffbrown/geblini18nmessages 查看项目。
package geblini18nmessages
class PersonData {
String name
String eyeColor
static constraints = {
eyeColor validator: { val ->
// valid
if(val in ['blue', 'green', 'brown']) return true
// invalid
return ['personData.eye.color.invalid', val]
}
}
}
personData.eye.color.invalid=Eye color with value [{2}] does not pass custom validation
当验证失败时,该自定义验证器返回 List
。 List
中的第一个元素表示将用于查找验证错误消息的消息键。 List
中的每个后续元素都可以是您想要放入消息中的任意值。在消息中,您可以使用 {2}
、{3}
等变量替换为 List
中的值。 {0}
是正在验证的 属性 的名称。 {1}
是域名 class。 {2}
以及上面的每个后续索引都将对应于您在消息代码后 List
中输入的值。
您显示的消息 ("Property [eye color] of [user] with value [brown] does not pass custom validation"
) 可以通过这样定义 属性 来实现:
personData.eye.color.invalid=Property [eye color] of [user] with value [{2}] does not pass custom validation.
在这种情况下使用 "eye color"
和 "user"
的参数没有意义,因为错误消息仅用于特定域中的特定 属性。
更多信息请见 https://docs.grails.org/4.0.5/ref/Constraints/validator.html。