【问题标题】:How to customize error messages in Grails 3.3?如何在 Grails 3.3 中自定义错误消息?
【发布时间】:2021-03-11 21:08:38
【问题描述】:

在 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

是否可以在任何地方定义“属性”和“类”名称的翻译,以便可以友好地显示错误?像

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

【问题讨论】:

    标签: grails grails3


    【解决方案1】:

    是否可以在任何地方定义“财产”的翻译和 “类”名称,所以错误可以友好地显示?像

    是的。您可以随意制作错误消息。

    https://github.com/jeffbrown/geblini18nmessages查看项目。

    https://github.com/jeffbrown/geblini18nmessages/blob/94ac5402782e4dbf10f3822cecf6857ba7451096/grails-app/domain/geblini18nmessages/PersonData.groovy

    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]
            }
        }
    }
    

    https://github.com/jeffbrown/geblini18nmessages/blob/94ac5402782e4dbf10f3822cecf6857ba7451096/grails-app/i18n/geblin.properties

    personData.eye.color.invalid=Eye color with value [{2}] does not pass custom validation
    

    当验证失败时,该自定义验证器将返回 ListList 中的第一个元素表示将用于查找验证错误消息的消息键。 List 中的每个后续元素都可以是您想要放入消息中的任意值。在消息中,您可以使用{2}{3} 等变量替换为List 中的值。 {0} 是正在验证的属性的名称。 {1} 是域类的名称。 {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

    【讨论】:

      猜你喜欢
      • 2012-07-14
      • 2011-11-27
      • 1970-01-01
      • 2011-03-16
      • 2014-10-25
      • 2012-12-11
      • 1970-01-01
      • 1970-01-01
      • 2020-12-04
      相关资源
      最近更新 更多