获取失败约束的名称

时间:2012-04-16 20:11:06

标签: validation grails groovy gorm

假设我有一个具有User属性的username类,并且在该字段上定义了几个约束。

class User {
    String username

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

如果我打电话

user.save()

然后,我可以通过

确定username字段上的任何约束是否失败
user.errors['username'] != null

但有没有办法可以找出哪些约束失败?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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