Pregunta

Soy nuevo en Grails y tengo un problema:

Tengo este fragmento 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> 

El controlador (MainController.groovy) utiliza un objeto de comando, aquí está el 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) 
        } 
} 

El problema es que cuando ingreso un nombre incorrecto o un pase (en blanco o fuera del rango) me muestra 4 errores, dos para la contraseña y dos para el nombre de usuario . Son los mismos, pero duplicados.

Encontré que al crear un método " bool validateCommand () {nombre & amp; & amp; contraseña} " y reemplazarlo por command.validate () no arroja duplicados, pero quiero usar las características de restricciones de Grails para mantener las cosas en SECO.

¿Alguna idea de por qué sucede esto? ¡Muchas gracias!

¿Fue útil?

Solución

Cuando inyectas objetos de comando en las acciones del controlador, Grails ejecuta validate () automáticamente, por lo que no es necesario llamarlo manualmente. Intenta

if(!cmd.hasErrors())

en lugar de

if(cmd.validate())

Parece que cada llamada a validate () agrega nuevos errores (duplicados) al objeto de comando. En mi humilde opinión esto no debería suceder y probablemente es un error en Grails. Debería considerar informar este problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top