2012-04-16 94 views
0

假设我有一个User类,它具有username属性,并且在此字段上定义了几个约束。获取失败约束的名称

class User { 
    String username 

    static constraints = { 
     username blank: false, unique: true, email: true 
    } 
} 

如果我打电话

user.save() 

然后我就可以计算出,如果任何对username场的约束通过

user.errors['username'] != null 

失败,但有什么办法,我可以找出哪些的约束失败?

+1

不知道你可以...也许可以从'user.errors [“用户名”] code'做得出来? – 2012-04-16 20:41:12

回答

2

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 
2

叶氏,你可以用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