1

这是一个不起作用的简单示例,我想知道是否有一种方法可以a在验证器块内部验证b它是否尚未经过验证。

示例我认为它会如何工作:

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

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

4

1 回答 1

3

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

但是,除了向您传递该字段的当前值的常见单参数自定义验证器和您显示的还可以访问域类实例的双参数验证器之外,还有一个三参数变体(不幸的是它没有'似乎没有在 Grails 参考文档中涵盖......)其中第三个参数是 SpringErrors实例。如果您定义一个三参数验证器,GORM 会忽略任何返回值,因为它假定您将直接使用该实例,并为任何验证问题自己Errors调用一个或多个不同的方法。rejectValue

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

于 2015-04-17T15:26:25.530 回答