2010-11-06 6 views
3

Je reçois uniquement le message du validateur par défaut. Qu'est-ce que je fais mal?Renvoyer l'erreur du validateur personnalisé Grails

class Questao { 


static hasMany = [alternativas:Alternativa] 

static constraints = { 

    alternativas (validator: {val, obj -> 
     if(val.size() < 2) 
      return ['validator.message'] //custom message 
     }) 
} 
} 

/i18n

questao.alternativas.validator.message = "must be greater than two" 

default.invalid.validator.message= Property [{0}] of class [{1}] with value [{2}] does not pass custom validation 

Merci

Répondre

6

vous retournez une liste contenant votre code de message - vous devez retourner simplement le code:

alternativas validator: { val, obj -> 
    if (val.size() < 2) { 
     return 'validator.message' //custom message 
    } 
} 
3

Cette API a modifié. Renvoyer une chaîne avec un message d'erreur personnalisé ne fonctionnera plus. Malheureusement, ceci n'est pas bien documenté.

Renvoyer une chaîne ou une liste non vide évaluera true selon la Groovy Truth. Ce qui signifie, le validateur signaux, "accepté". - Soit return false, ou, si vous avez besoin d'un message d'erreur personnalisé, explicitement rejectValue(..) la valeur:

alternativas (validator: {val, obj -> 
    if(val.size() < 2) 
     obj.errors.rejectValue('alternatives', 
      'questao.alternativas.validator.message') 
    }) 
+0

Ce n'est pas documenté parce que ce n'est pas vrai. –

+0

Désolé, je me suis trompé à ce sujet. - Cependant, le retour d'une chaîne à partir d'un 'validator' n'est pas du tout documenté ni dans le Grails * User Guide * ni dans le * Wiki * (dans ce dernier, pas au moins dans un endroit visible). - Ainsi, il est fort probable que l'on tire des conclusions erronées lorsque les cas de tests simples sur cette question échouent. – robbbert

+0

Il est documenté, bien que: http://grails.org/doc/latest/ref/Constraints/validator.html - Si vous regardez dans la liste en bas, il dit 'La fermeture peut retourner ... une chaîne à Indiquez le code d'erreur à ajouter à "classname.propertName". ... 'La partie la plus difficile de tout cela est de comprendre comment la chaîne retournée est mappée à une clé dans' messages.properties'; Une fois que vous avez compris cela, ce n'est pas trop compliqué. –

0

De plus:

En Grails 2.5.2 (je ne testé dans cette version) si vous utilisez les erreurs argument dans la fermeture du validateur personnalisé et retourner un code de message (ou un tableau avec le code de message) cela ne fonctionne pas, vous devez utiliser directement l'objet d'erreurs pour mettre le code du message.

Questions connexes