2009-05-05 13 views
1

Je suis nouveau à Grails et j'ai un problème:Grails erreur en double Messages

Je cet extrait de GSP:

<g:form url="[controller:'main',action:'login']"> 
    <label for="name">Usuario:</label><br/> 
    <input type="text" name="name" /><br/> 
    <label for="pass">Password:</label><br/> 
    <input type="password" name="password"/><br/> 
    <input type="submit" value="Login"/><br/> 
    <g:renderErrors bean="${cmd}"/> 
</g:form> 

Le contrôleur (MainController.groovy) utilise un objet de commande, voici le code pour les deux:

def login = { LoginCommand cmd -> 
    if(cmd.validate()){ 
    redirect(action:'ok') 
    }else{ 
    render(view:'index',model:[cmd:cmd]) 
    } 
    } 

class LoginCommand { 

     String name 
     String password 

     static constraints = { 
       name(blank:false,size:5..10) 
       password(blank:false,size:5..10) 
     } 
} 

le problème est que quand je rentre dans un mauvais nom ou passe (en blanc ou en dehors de la plage) il me montre 4 erreurs, deux pour le mot de passe et deux pour les Etats-Unis nom d'utilisateur. Ils sont identiques, mais dupliqués.

Je trouve que la création d'une méthode « bool validateCommand() {nom & & mot de passe} » et de le remplacer par command.validate() ne jette pas des doublons, mais je veux utiliser les fonctions contraintes de Grails pour garder les choses SEC .

Une idée pourquoi cela se produit? Merci beaucoup!

Répondre

8

Lorsque vous injectez des objets de commande dans les actions du contrôleur, Grails exécute validate() automatiquement, il n'est donc pas nécessaire de l'appeler manuellement. Essayez

if(!cmd.hasErrors()) 

au lieu de

if(cmd.validate()) 

Il semble que chaque appel à validate() ajoute de nouvelles erreurs (en double) à l'objet de commande. À mon humble avis cela ne devrait pas arriver et est probablement un bug dans Grails. Vous devriez considérer reporting ce problème.

+0

Cela a juste sauvé ma santé mentale. Je vous remercie –