2012-04-16 2 views
0

Supposons que j'ai une classe User qui a une propriété username et que plusieurs contraintes sont définies dans ce champ.obtenir le nom des contraintes ayant échoué

class User { 
    String username 

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

Si j'appelle

user.save() 

je peux alors comprendre si l'une des contraintes sur le terrain username a échoué via

user.errors['username'] != null 

Mais est-il un moyen que je peux comprendre que des contraintes a échoué?

+1

Je ne sais pas vous ... pourriez être en mesure de travailler hors de 'user.errors [ 'username'] recueil HSC.? –

Répondre

2

La valeur user.errors['username'].codes contiendra un nombre de clés utilisé pour rechercher des messages de validation dans messages.properties. Vous pouvez les utiliser pour déterminer quelles contraintes ont été rompues.

Par exemple, user.errors['username'].codes[-1] contiendra la partie de contrainte de la clé 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

Yeap, vous pouvez vérifier le code d'erreur avec code propriété sur l'objet d'erreur:

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' 

Si vous peut avoir plus d'une erreur dans une propriété, la seule façon dont j'ai trouvé pour obtenir toutes les erreurs pour cette propriété est d'itérer la propriété 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" 
} 

Si quelque chose de sortie comme:

bar: blank 
baz: notEqual 
baz: email.invalid 
Questions connexes