命令对象上的一个约束可以检查另一个的结果吗?

时间:2015-04-17 14:59:16

标签: grails command-objects grails-constraints

这是一个不起作用的简单示例,我想知道是否有一种方法可以在a的验证程序块内验证b,如果它没有&#39}。已经过验证。

示例我认为它会起作用:

static constraints =
{
    a nullable: false
    b validator: { val, obj ->
        if(obj.errors.hasFieldError('a'))
        {
            return false
        }
    }
}

注意:在这种情况下,即使obj.errors.hasFieldError('a')为空,a也会返回false。

1 个答案:

答案 0 :(得分:3)

我不认为检查约束的顺序有任何保证,并且它不太可能与constraints中指定的订单有任何关系块。

但是,除了传递该字段的当前值的常见one-arg自定义验证器和显示您还可以访问域类实例的访问权限的双arg验证器之外,还有三个 - arg变体(遗憾的是它似乎没有在Grails参考文档中介绍......),其中第三个参数是Spring Errors实例。如果您定义了三个arg验证器,GORM会忽略任何返回值,因为它假定您将直接使用Errors实例,调用一个或多个不同的{{1}用于任何验证问题的方法。

因此,您可以从rejectValue块中删除您想要自己运行的任何标准验证,并使用此方法。您可以在the Spring docs中找到有关使用constraints对象的更多信息。