2010-01-22 78 views
9

要處理viewExpiredException在JSF,我在web.xml編碼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> 

error.html我已重定向到原始登錄頁面。但問題是會話作用域bean甚至會話過期也未被清除。有什麼辦法可以解決這個問題嗎?

回答

7

登錄頁面很可能是從瀏覽器緩存中請求的。通過創建與FacesServlet綁定的Filter來禁用它,並且在doFilter()方法中基本上具有以下幾行內容,因此您不需要在要防止緩存的所有頁面上重複該操作。

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

如果我使用Facelets並且具有固定的佈局,是否有任何區別將它設置在標題或過濾器中? – RinaldoPJr 2012-10-02 19:04:06

+0

@林:不,絕對沒有區別。你只需要記住HTTP響應頭總是優先於在meta中設置的響應頭。因此,如果服務器在HTTP響應頭中設置了一些默認值,那麼它們將覆蓋您在meta中設置的默認值。另見http://stackoverflow.com/questions/49547/making-sure-a-web-page-is-not-cached-across-all-browsers/2068407#2068407和http://stackoverflow.com/questions/ 10305718/avoid-back-button-on-jsfprimefaces-application/10305799#10305799 – BalusC 2012-10-02 19:05:28

+0

對不起,忘了謝謝。 :)這非常有啓發性; – RinaldoPJr 2012-10-04 12:07:43

相關問題