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

Can one constraint on a command object check the result of another?

这是一个不起作用的简单示例,我想知道是否有一种方法可以在 b 的验证程序块内验证 a 如果它尚未被验证.

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

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

注意:在这种情况下 obj.errors.hasFieldError('a') returns false 即使 a 为 null。

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

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

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