Grails doppelte Fehlermeldungen
-
05-07-2019 - |
Frage
Ich bin neu in Grails und habe ein Problem:
Ich habe diesen Ausschnitt von 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>
Der Controller (MainController.Groovy) verwendet ein Befehlsobjekt. 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 ich, wenn ich einen schlechten Namen oder einen schlechten Namen oder einen schlechten Bestehen eingehe (leer oder außerhalb des Bereichs) Es zeigt mir 4 Fehler, zwei für das Passwort und zwei für den Benutzernamen. Sie sind gleich, aber dupliziert.
Ich habe festgestellt, dass das Erstellen einer Methode "bool validateCommand () {name && password}" und das Ersetzen durch den Befehl. Validate () wirft keine Duplikate aus, aber ich möchte die Einschränkungen von Grails verwenden, um die Dinge trocken zu halten.
Irgendeine Idee, warum das passiert? Vielen Dank!
Lösung
Wenn Sie Befehlsobjekte in Controller -Aktionen injizieren, ausgeführt Grails ausgeführt validate()
automatisch, also muss es nicht manuell anrufen. Versuchen
if(!cmd.hasErrors())
Anstatt von
if(cmd.validate())
Es scheint, dass jeder Anruf dazu validate()
Fügt dem Befehlsobjekt neue (doppelte) Fehler hinzu. IMHO Das sollte nicht passieren und ist wahrscheinlich ein Fehler in Grails. Du solltest in Betracht ziehen Berichterstattung dieses Problem.