Question

Je suis nouveau à Grails et j'ai un problème:

J'ai 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 lorsque je saisis un mauvais nom ou un passe (vide ou en dehors de la plage) , 4 erreurs s'affichent, deux pour le mot de passe et deux pour le nom d'utilisateur . Ils sont identiques mais dupliqués.

J'ai constaté que la création d'une méthode "bool validateCommand () {name & amp; & amp; mot de passe} " et le remplacer par command.validate () ne renvoie pas de doublons, mais je veux utiliser les fonctionnalités de contraintes de Grails pour garder les choses au sec.

Avez-vous une idée du pourquoi? Merci beaucoup!

Était-ce utile?

La solution

Lorsque vous injectez des objets de commande dans les actions du contrôleur, Grails exécute automatiquement validate () . 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 (dupliquées) à l'objet de commande. IMHO cela ne devrait pas arriver et est probablement un bug dans Grails. Vous devez envisager de signaler ce problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top