Grails 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.
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() {
}
}
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).
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.