Lo + Leído
Eventos destacados
Artículos para tus primeros pasos
Si estás empezando a introducirte en el mundo de Groovy y Grails, no te pierdas nuestros artículos básicos:
- Introducción a Groovy, parte 1 (Andrés Almiray)
- Introducción a Groovy, parte 2 (Andrés Almiray)
- Introducción a Groovy, parte 3 (Andrés Almiray)
- Introducción a Grails (Material Seminario ImaginaWorks)
Entrevistas con los expertos
Los protagonistas te cuentan de qué van los proyectos más importantes del mundo Groovy:
Grails
Cargar página con Ajax cuando la sesión ha finalizado
yagarsi - lunes 19/04/2010Hola,
Actualmente tengo configurada la aplicación, de tal forma que, cuando la sesión ha finalizado por timeout, y se ejecuta alguna acción, el filtro de seguridad carga la página de login. El problema surge cuando ejecuto un enlace, que actualiza una parte de una página con Ajax y la sesión ha finalizado por timeout, ya que en la porción de la página a actualizar, se muestra la página de login.
¿Cómo puedo hacer para que al ejecutar un enlace Ajax, con la sesión terminada, vaya a la página de login?
Gracias
Re: Cargar página con Ajax cuando la sesión ha finalizado
Nacho - martes 20/04/2010Hola,
la idea para resolver tu problema es detectar en el servidor si la petición es Ajax o no. Puedes aprovechar las capacidades dinámicas de Groovy para añadir un método dinámico a la request que te informe del caso leyendo la cabecera x-requested-with. Para hacerlo debes incluir algo así en tu grails-app/conf/BootStrap.groovy:
import javax.servlet.http.HttpServletRequest
class BootStrap {
def init = { servletContext ->
HttpServletRequest.metaClass.isAjax = {->
'XMLHttpRequest' == delegate.getHeader('X-Requested-With')
}
}
def destroy = {
}
}
De esta manera podrás hacer:
if(request.ajax){
render "<script type=\"javascript\">window.location.href=${createLink(...)};</script>"
}
else {
//redirect a la página de login
}
Cuando se reciba una petición Ajax se generará un salto mediante javascript a la página de login, en lugar de mostrarla directamente en el div.