【问题标题】:Return Custom Validator Error Grails返回自定义验证器错误 Grails
【发布时间】:2010-11-06 04:23:56
【问题描述】:

我只收到默认验证器消息。我做错了什么?

class Questao {


static hasMany = [alternativas:Alternativa]

static constraints = {

    alternativas (validator: {val, obj ->
       if(val.size() < 2)
            return ['validator.message'] //custom message
        })
}
}

/i18n

questao.alternativas.validator.message = "must be greater than two"

default.invalid.validator.message= Property [{0}] of class [{1}] with value [{2}] does not pass custom validation

谢谢

【问题讨论】:

    标签: grails internationalization validation constraints


    【解决方案1】:

    您正在返回一个包含您的消息代码的列表 - 您只需返回代码:

    alternativas validator: { val, obj ->
       if (val.size() < 2) {
          return 'validator.message' //custom message
       }
    }
    

    【讨论】:

      【解决方案2】:

      此 API 已更改。返回带有自定义错误消息的字符串将不再有效。不幸的是,这没有很好的记录。

      根据Groovy Truth,返回字符串或非空列表将评估为true。这意味着,验证器信号,“接受”。 - return false,或者,如果您需要自定义错误消息,明确rejectValue(..) 值:

      alternativas (validator: {val, obj ->
         if(val.size() < 2)
             obj.errors.rejectValue('alternatives',
                 'questao.alternativas.validator.message')
          })
      

      【讨论】:

      • 它没有记录,因为它不是真的。
      • 对不起,我弄错了。 - 但是,在 Grails User GuideWiki 中都没有记录从 validator 返回字符串(在后者中,不在显着位置)地方,至少)。 - 因此,当关于该问题的简单测试用例失败时,很可能得出错误的结论。
      • 它被记录在案,但是:grails.org/doc/latest/ref/Constraints/validator.html - 如果您查看底部的列表,它会显示The closure can return ... a string to indicate the error code to append to the "classname.propertName." ... 最困难的部分是了解返回的字符串如何映射到messages.properties;不过,一旦你掌握了窍门,它就不会太棘手了。
      • 关于在文档otherProperty validator: { return ['custom.error', arg1, arg2] } 中返回列表的部分并没有很好的记录
      • 没有很好的记录是一种委婉说法。这很糟糕!
      【解决方案3】:

      另外:

      在 Grails 2.5.2 中(我只在这个版本中测试过)如果你在自定义验证器闭包中使用 errors 参数并返回一个消息代码(或带有消息代码的数组)它不起作用,你需要使用直接将errors对象放入消息代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-15
        • 1970-01-01
        • 2013-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多