Mensajes de error duplicados de Grails
-
05-07-2019 - |
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!
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.