使用Mojarra 2.1.3,NetBeans 7.0.1,Primefaces 3.2的Im。在用戶點擊瀏覽器後退按鈕(強制刷新HTTP請求)後強制執行ViewScoped Bean重新初始化
我的應用程序中有一些由ViewScoped支持bean支持的動態xhtml頁面。每個頁面都有p:dataTable,它顯示來自backing bean的List <>。當用戶使用數據表中的每個項目的詳細信息導航到其他頁面時,會發生此問題。在瀏覽詳細信息時,用戶很可能會點擊瀏覽器後退按鈕返回列表。所以我在我的應用程序中實現了這樣的過濾器。
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest httpReq = (HttpServletRequest) request;
HttpServletResponse httpRes = (HttpServletResponse) response;
if (!httpReq.getRequestURI().startsWith(httpReq.getContextPath() + ResourceHandler.RESOURCE_IDENTIFIER)) { // Skip JSF resources (CSS/JS/Images/etc)
httpRes.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
httpRes.setHeader("Pragma", "no-cache"); // HTTP 1.0.
httpRes.setDateHeader("Expires", 0); // Proxies.
}
chain.doFilter(request, response);
}
但我有一個問題,如下解釋:How to move user to timeout page when session expires, if user click on browser back button瀏覽器應改爲發送fullworthy新鮮的HTTP請求到服務器。
但在我的情況下,它沒有。我看到的是無處不在的網頁已過期頁面,這在我看來不是用戶友好的體驗。我想要的不是它從瀏覽器緩存加載,而是創建一個新的請求到服務器並顯示正確的頁面(不是網頁已過期頁面)。可能嗎。
請幫忙。非常感謝。
Hi BalusC,謝謝你的回答。我實際上使用h:鏈接鏈接到第二頁。但它仍然是一個問題。 – frazkok 2012-07-19 00:51:36
「網頁已過期」表示非緩存頁面已通過POST請求打開。 – BalusC 2012-07-19 01:39:01
嗨BalusC它在Opera中工作,但不是在IE中。我使用MSIE 9.任何想法? IE不斷顯示可怕的網頁已過期頁面。 – frazkok 2012-07-19 02:18:27