2009-05-05 10 views
1

Ich bin neu in Grails und ich habe ein Problem:Grails Doppelte Fehlermeldungen

ich diesen Ausschnitt des GSP haben:

<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> 

Der Controller (MainController.groovy) verwendet ein Command-Objekt, hier ist der Code für beide:

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) 
     } 
} 

das Problem ist, dass, wenn ich einen schlechten Namen oder Pass (freier Raum oder außerhalb des Bereichs) eingeben es mir 4 Fehler zeigt, zwei für das Passwort und zwei für die uns Vorname. Sie sind gleich, aber dupliziert.

Ich fand, dass ein Verfahren zu schaffen „Bool validateCommand() {Name & & Kennwort}“ und es für command.validate ersetzen() wirft keine Duplikate, aber ich will die Einschränkungen Merkmale von Grails verwenden, um die Dinge trocken zu halten .

Eine Idee, warum das passiert? Vielen Dank!

Antwort

8

Wenn Sie Befehlsobjekte in Controller-Aktionen injizieren, führt Grails automatisch aus, so dass Sie es nicht manuell aufrufen müssen. Versuchen

if(!cmd.hasErrors()) 

statt

if(cmd.validate()) 

Es scheint, dass jeder Anruf zu validate() neue hinzufügt (duplicate) Fehler an das Befehlsobjekt. IMHO sollte das nicht passieren und ist wahrscheinlich ein Fehler in Grails. Sie sollten reporting dieses Problem in Betracht ziehen.

+0

Dies hat nur meine Gesundheit gerettet. Danke –