Messages d'erreur en double de Grails
-
05-07-2019 - |
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!
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.