Skip to content

Instantly share code, notes, and snippets.

@iberck
Last active September 22, 2017 02:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save iberck/1efa5f3fc7008c46f12f27c960a2e6b5 to your computer and use it in GitHub Desktop.
Save iberck/1efa5f3fc7008c46f12f27c960a2e6b5 to your computer and use it in GitHub Desktop.
Grails flash scope

Flash scope

El flash scope es un mapa temporal que se guarda en la sesión el cual está presente en el request actual y en el siguiente request, luego es borrado por automático.

Regularmente se utiliza para que un objeto viva después de una redirección (a menudo mensajes).

Al estar en la sesión no tiene problemas de race conditions tal como sucede en play framework ya que ellos guardan la sesión en una cookie.

Redirect y flash scope

Nota: En los comentarios del código explica por qué el objeto flash.message sigue viviendo después de una redirección:

class TestController {

    def index() {
    }

    def formSubmit() {
        // flash.message VIVIRÁ DURANTE ESTE REQUEST Y EL SIGUIENTE
        flash.message = "éxito"

        // LE CONTESTA AL BROWSER 302 (SEE OTHER/MOVED TEMPORALY) INDICANDO QUE VISITE
        // LA ACCIÓN /success. ENSEGUIDA EL BROWSER LANZA EL SEGUNDO REQUEST HACIA /success
        // POR LO QUE EL OBJETO "flash.message" aún existe. 
        redirect action: "success" 
    }

    def success() {
    }
}

create an anchor

Flash scope y mensajes

Comunmente se utiliza el flash scope para mostrar en las páginas mensajes de error/exito, sin embargo se recomienda que después de agregrar el mensaje al flash scope se proceda con un redirect en vez de un render para que al realizar cualquier operación desaparezca el mensaje (de lo contrario vivirá durante 2 peticiones).

Flash scope and load balancer

Yep, you're absolutely right. Flash uses the http session to store stuff so if you're using a load balancer without sticky sessions you shouldn't use flash scope.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment