iberck
11/2/2016 - 4:17 AM

Grails flash scope

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.