我有一个在两个字段上进行大小验证的域对象。该对象基本上是这样的:
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查找它们,但这似乎非常疯狂和极端。让我感到困惑的是,我之前从未见过这个问题……让我觉得以某种方式,正在发生一些不同的事情,导致代码的奇怪顺序。还是我完全误解了它应该如何工作?
最佳答案
好吧...发现,除了迭代遍历allErrors并尝试以这种方式提取代码外,您还可以遍历fieldErrors并将整个fieldError传递到messageSource中,它将自行解决。
所以...
domainObject.errors.fieldErrors.each {
someList << messageSource.getMessage(it, locale)
}
希望这对以后的人有所帮助。
关于validation - Grails验证程序未返回预期的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28948891/