Redirect after post
A continuación se presenta el modelo tradicional de programación sin el patrón de diseño Redirect After Post.
El usuario invoca un controlador/accion desde el browser, por ejemplo:
http://localhost/sigrem/hotel/save
Dicha acción renderiza una página:
class HotelController {
def save() {
render view:'list'
}
}
http://localhost/sigrem/hotel/save
porque la acción save renderizó el contenido de la página list, pero sobre la misma acción solicitada.El usuario invoca un controlador/accion desde el browser, por ejemplo:
http://localhost/sigrem/hotel/save
Dicha acción invoca otra acción con redirect (es quien aplica el patrón de diseño):
class HotelController {
def save() {
redirect action:'list'
}
}
list
la cual a su vez renderiza el contenido de la página list.gsp
:class HotelController {
def list() {
render view:'list'
}
}
http://localhost/sigrem/hotel/list
El patrón de diseño además de prevenir se lancen acciones repetidas con f5, permite hacer bookmarking de las páginas (página que se muestra, es página que corresponde a la url del navegador).
Redirect After post y flash scope
En general la recomendación es siempre hacer un redirect después de un post (envío de formulario) que modifica el estado de la aplicación por si el usuario presiona f5 no se vuelva a lanzar la acción.
http://stackoverflow.com/questions/1354719/grails-controller-methods