验证的执行顺序是否始终相同?是如何排序的?
对于这些限制:
static constraints = {
A ...
B ...
C ...
}
它们总是按照 A -> B -> C 的顺序执行吗?
为什么我需要它?
在验证A时,我需要检查数据库是否存在标识符。如果不是,我将无法通过验证。 B 和 C 取决于查找的值。
最佳答案
鉴于 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/