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!

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top