Grails Messaggi di errore duplicati
-
05-07-2019 - |
Domanda
Sono nuovo di Grails e ho un problema:
Ho questo frammento di SPG:
<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>
Il controller (MainController.groovy) utilizza un oggetto comando, ecco il codice per entrambi:
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)
}
}
Il problema è che quando inserisco un nome errato o passo (vuoto o al di fuori dell'intervallo) mi mostra 4 errori, due per la password e due per il nome utente . Sono gli stessi, ma duplicati.
Ho scoperto che la creazione di un metodo " bool validateCommand () {name & amp; & amp; password} " e sostituirlo con command.validate () non genera duplicati, ma voglio usare le caratteristiche dei vincoli di Grails per mantenere le cose ASCIUTTE.
Qualche idea sul perché questo accada? Grazie mille!
Soluzione
Quando si iniettano oggetti comando nelle azioni del controller, Grails esegue automaticamente validate ()
, quindi non è necessario chiamarlo manualmente. Prova
if(!cmd.hasErrors())
anziché
if(cmd.validate())
Sembra che ogni chiamata a validate ()
aggiunga nuovi (duplicati) errori all'oggetto comando. IMHO questo non dovrebbe succedere e probabilmente è un bug in Grails. Dovresti considerare segnalare questo problema.