获取失败约束的名称
问题描述:
假设我有一个User
类,它具有username
属性,并且在此字段上定义了几个约束。获取失败约束的名称
class User {
String username
static constraints = {
username blank: false, unique: true, email: true
}
}
如果我打电话
user.save()
然后我就可以计算出,如果任何对username
场的约束通过
user.errors['username'] != null
失败,但有什么办法,我可以找出哪些的约束失败?
答
值user.errors['username'].codes
将包含许多用于在messages.properties
中查找验证消息的密钥。您可以使用这些来确定哪些约束被破坏。
例如,user.errors['username'].codes[-1]
将包含messages.properties
密钥的限制部分:
assert user.errors['username'].codes[-1] == 'blank' // if blank constraint fails
assert user.errors['username'].codes[-1] == 'unique' // if unique constraint fails
答
叶氏,你可以用code
属性检查错误代码的错误对象:
def user = new User(email: '')
user.validate()
assert user.errors['email'].code == 'blank'
user.email = 'asdasd'
user.validate()
assert user.errors['email'].code == 'email.invalid'
如果您可能有一个以上的属性错误,我发现获得该属性的所有错误的唯一方法是迭代allErrors
属性:
class Foo {
String bar, baz
static constraints = {
bar blank: false
baz email: true, notEqual: 'foobar'
}
}
def foo = new Foo(bar: '', baz: 'foobar')
foo.validate()
foo.errors.allErrors.each {
println "$it.field: $it.code"
}
应该输出类似:
bar: blank
baz: notEqual
baz: email.invalid
不知道你可以...也许可以从'user.errors [“用户名”] code'做得出来? – 2012-04-16 20:41:12