martes, 28 de junio de 2011

GRAILS - Evitar envío duplicado del formulario

Muchas veces (por no decir siempre) nos encontramos con el problema de evitar que un usuario envíe dos o más veces el mismo formulario (ya sabemos todos que existen usuarios que parece que tienen un tick nervioso en el dedo y no parar de dar a los botones por si no les ha hecho caso...).


Una solución fácil es deshabilitar el botón una vez que se ha pulsado sobre él. Peeeeero por desgracia, los diseñadores no quieren dejarnos las cosas tan fáciles y tienden a usar enlaces en lugar de botones, con lo que el simple disabled="disabled" se acabó. Siempre podríamos quitar el botón, quitar el enlace, superponer algo, etc. pero creo que es un poco engorroso.

Bueno, pues grails nos proporciona una manera de controlar esta duplicidad de envío de una forma bastante sencilla.

  1. En el formulario incluiremos el atributo useToken="true"
    <g:form action="save" name="frmEnvio" usetoken="true">
  2. Ahora simplemente en las acciones del controlador, incluiremos el código que queremos que se ejecute con el primer envío dentro de withForm{} y el código que queremos que se ejecute con posteriores envíos tras invalidToken{}
    def save = {
        withForm{
            //Código para el primer envío
        }.invalidToken{
            //Código para envíos posteriores
        }
    }

Yo sólo he encontrado una pega a este sistema. Muchas veces te preguntas... ¿a dónde llevo al usuario cuando no deja de pulsar el botoncito? Cada uno tendrá que ingeniárselas en este punto, ya que no hay una formula mágica que sirva para todos.

Enjoy!

0 comentarios:

Publicar un comentario

Twitter Delicious Facebook Digg Stumbleupon Favorites More