Pergunta

Sou novo no Grails e tenho um problema:

Eu tenho esse trecho 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> 

O controlador (MainController.groovy) usa um objeto de comando, aqui está o código para ambos:

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

O problema é que, quando entro em um nome ou passe ruim (em branco ou fora do alcance) Isso me mostra 4 erros, dois para a senha e dois para o nome de usuário. Eles são iguais, mas duplicados.

Descobri que criar um método "bool validateCommand () {name && senha}" e substituindo -o para command.validate () não lança duplicatas, mas quero usar os recursos de restrições dos graals para manter as coisas secas.

Alguma ideia de por que isso acontece? Muito obrigado!

Foi útil?

Solução

Quando você injeta objetos de comando em ações do controlador, os Grails executam validate() automaticamente, portanto, não há necessidade de chamá -lo manualmente. Tentar

if(!cmd.hasErrors())

ao invés de

if(cmd.validate())

Parece que todo chamado para validate() Adiciona novos erros (duplicados) ao objeto de comando. IMHO isso não deve acontecer e provavelmente é um bug nos Grails. Voce deveria considerar comunicando esse assunto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top