我正在使用 Mojarra 2.1.3、NetBeans 7.0.1、Primefaces 3.2。
我的应用程序中有一些由 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);
}
但是我有一个问题,正如这里所解释的:当会话到期时如何将用户移动到超时页面,如果用户单击浏览器后退按钮,浏览器应该改为向服务器发送一个完全值得的新 HTTP 请求。
但就我而言,它没有。相反,我看到无处不在的网页已过期,我认为这不是用户友好的体验。我想要的不是从浏览器缓存中加载它,而是向服务器创建一个新请求并显示正确的页面(不是网页有过期页面)。是否可以。
请帮忙。非常感谢。