【问题标题】:Can one constraint on a command object check the result of another?命令对象上的一个约束可以检查另一个约束的结果吗?
【发布时间】:2015-04-17 14:59:15
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: grails command-objects grails-constraints


    【解决方案1】:

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

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

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

    【讨论】:

    • 听起来是个好主意,我有多个字段要检查,所以我需要将它们全部放在约束闭包之外。我对闭包不太熟悉,是否可以在方法中调用约束闭包并传递一些字段名称以进行操作?
    猜你喜欢
    • 2011-01-28
    • 1970-01-01
    • 2019-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多