【发布时间】:2015-03-09 18:09:11
【问题描述】:
我有一个在两个字段上进行大小验证的域对象。该对象基本上是这样的:
class foo {
String name
String description
static constraints = {
name nullable: false, blank: false, size: 3..31, validator { val, obj ->
// additional data validation returning a code if it fails
}
description nullable: true, size: 3..255
}
}
问题是我希望“默认”错误的形式为 class.field.error(例如,com.Foo.description.size.toosmall),但实际上,当域类生成代码,最终代码是“size.toosmall”,不是完全合格的版本。所以getCode用处不大。
代码列表是如何生成的,解决此问题的最佳方法是什么?我想过迭代所有代码并使用 messageSource 来查找它们,但这似乎非常疯狂和极端。让我感到困惑的是,我以前从未见过这个问题......让我觉得不知何故,正在发生一些不同的事情导致代码的奇怪顺序。还是我完全误解了它应该如何工作?
【问题讨论】:
-
为什么您会认为非常具体的错误代码将是最后一个检查的错误代码,因为一旦在 message.properties 中找到具有翻译的错误代码就会停止?
-
代码迭代了 allErrors 而不是 fieldErrors。我继承了它,但无法弄清楚为什么它没有(当错误传递给 messageSource 时)找出正确的代码。事实证明代码是错误的。我们没有让 gorm 做它的事情,而是手动做,通过更改为 fieldError,它能够遍历错误代码并选择正确的代码。
标签: validation grails