validation - 验证顺序

标签 validation grails grails-3.0

验证的执行顺序是否始终相同?是如何排序的?

对于这些限制:

static constraints = {
   A ...
   B ...
   C ...
}

它们总是按照 A -> B -> C 的顺序执行吗?

为什么我需要它?

在验证A时,我需要检查数据库是否存在标识符。如果不是,我将无法通过验证。 BC 取决于查找的值。

最佳答案

鉴于 Grails 本身不保证顺序,并且版本之间可能会发生变化,因此您对它的任何依赖充其量都是脆弱的。

这表明您处理问题的方法不正确。

考虑到字段 B 和 C 取决于 A 的情况,正确的解决方案是为 A 实现一个考虑所有三个的自定义验证器。

类似这样的事情:

a(validator: { val, obj, errors ->
  if (!val ...) { 
    errors.rejectValue('a', 'whatever.problem')
    return
  }
  if (!obj.b ...) { 
    errors.rejectValue('b', 'some.other.problem')
    return
  }
  if (!obj.c ...) { 
    errors.rejectValue('c', 'another.problem')
    return
  }
})

关于validation - 验证顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42887986/

相关文章:

hibernate - Grails Hibernate 版本升级

grails - 不确定用于Groovy调用的输入参数:模糊方法重载

Grails 3.0.1 - 如何在 application.yml 中配置 grails.gorm.default.constraints

grails - 有没有办法用 mongodb 控制 gorm 中的加载关系?

database - 业务逻辑验证的好地方

validation - Google 表格 - 数据验证 - 使用范围列表中的公式

hibernate - Grails GORM 多对多关系和可连接条目的删除

c# - 正则表达式验证属性无法正常工作

java - 单击按钮时触发验证(Java swing)

grails - 如何在 Grails 中配置分布式缓存(没有 Terracota)