2010-01-22 16 views
9

Para manejar viewExpiredException en JSF, codifiquéviewExpiredException JSF

<error-page> 
    <exception-type>javax.faces.application.ViewExpiredException</exception-type> 
    <location>/error.html</location> 
</error-page> 

<session-config> 
    <session-timeout>1</session-timeout> 
</session-config> 

en web.xml.

En error.html me han redirigido a la página de inicio de sesión original. Pero el problema es que el bean con ámbito de sesión no se borró, incluso la sesión expiró. ¿Hay alguna forma de resolver esto?

Respuesta

7

Es probable que se haya solicitado la página de inicio de sesión desde el caché del navegador. Deshabilítelo creando un Filter que está vinculado al FacesServlet y tiene básicamente las siguientes líneas en el método doFilter(), de modo que no necesita repetirlo en todas las páginas que desea evitar que sean almacenadas en caché.

response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1. 
response.setHeader("Pragma", "no-cache"); // HTTP 1.0. 
response.setDateHeader("Expires", 0); // Proxies. 
+0

Si utilizo Facelets y tengo un diseño fijo, ¿hay alguna diferencia configurándolo en el encabezado o en un filtro? – RinaldoPJr

+0

@Rin: No, no hay absolutamente ninguna diferencia. Solo debe tener en cuenta que los encabezados de respuesta HTTP siempre tienen precedencia sobre los establecidos en meta. Por lo tanto, si el servidor ha configurado algunos valores predeterminados en el encabezado de respuesta HTTP, anulará los que haya establecido en meta. Ver también http://stackoverflow.com/questions/49547/making-sure-a-web-page-is-not-cached-across-all-browsers/2068407#2068407 y http://stackoverflow.com/questions/ 10305718/avoid-back-button-on-jsfprimefaces-application/10305799 # 10305799 – BalusC

+0

Lo siento, se olvidó de agradecerte. :) Fue muy esclarecedor; – RinaldoPJr