返回自定义验证程序错误Grails

返回自定义验证程序错误Grails,grails,internationalization,validation,constraints,Grails,Internationalization,Validation,Constraints,我只收到默认的验证器消息。我做错了什么 class Questao { static hasMany = [alternativas:Alternativa] static constraints = { alternativas (validator: {val, obj -> if(val.size() < 2) return ['validator.message'] //custom message })

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

class Questao {


static hasMany = [alternativas:Alternativa]

static constraints = {

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

谢谢

您正在返回包含邮件代码的列表-您只需返回代码:

alternativas validator: { val, obj ->
   if (val.size() < 2) {
      return 'validator.message' //custom message
   }
}
alternativas验证程序:{val,obj->
如果(值大小()<2){
返回“validator.message”//自定义消息
}
}

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

返回字符串或非空列表将根据Groovy真理计算为
true
。也就是说,验证器发出“已接受”的信号-
返回false
,或者,如果需要自定义错误消息,则显式地
拒绝值(..)
值:

alternativas (validator: {val, obj ->
   if(val.size() < 2)
       obj.errors.rejectValue('alternatives',
           'questao.alternativas.validator.message')
    })
alternativas(验证器:{val,obj->
如果(值大小()<2)
obj.errors.rejectValue('Alternations',
'questao.alternativas.validator.message')
})
此外:


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

由于它不是真的,所以没有文档记录。对不起,我弄错了。-但是,无论是在Grails用户指南中还是在Wiki中(在后者中,至少不在显著位置),都没有记录从验证程序返回字符串的过程因此,当关于这个问题的简单测试用例失败时,很可能会得出错误的结论。。。一个字符串,用于指示要附加到“classname.propertName.”的错误代码。…最困难的部分是理解返回的字符串如何映射到
messages.properties中的键;不过,一旦你掌握了窍门,就不会太棘手了。关于在doc
otherProperty验证器中返回列表的部分呢:{return['custom.error',arg1,arg2]}
没有很好的文档化没有很好的文档化是一种委婉说法。太糟了!
alternativas (validator: {val, obj ->
   if(val.size() < 2)
       obj.errors.rejectValue('alternatives',
           'questao.alternativas.validator.message')
    })