【问题标题】:Force a ViewScoped Bean Reinitialization after User Click on Browser Back Button (Force Fresh HTTP Request)用户单击浏览器后退按钮后强制 ViewScoped Bean 重新初始化(强制新 HTTP 请求)
【发布时间】:2012-07-17 08:20:21
【问题描述】:

我正在使用 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);
}

但是我有一个问题,如下所述:How to move user to timeout page when session expires, if user click on browser back button 浏览器应该向服务器发送一个完全值得的新 HTTP 请求。

但在我的情况下它没有。相反,我看到无处不在的网页已过期,我认为这不是用户友好的体验。我想要的不是从浏览器缓存中加载它,而是向服务器创建一个新请求并显示正确的页面(不是网页有过期页面)。有没有可能。

请帮忙。非常感谢。

【问题讨论】:

    标签: jsf-2 primefaces browser-cache managed-bean


    【解决方案1】:

    如果导航是通过 POST 请求而不是 GET 请求进行的,则会发生这种情况。

    您应该确保页面到页面的导航始终通过 GET 请求进行。例如

    <p:dataTable value="#{bean.items}" var="item">
        <p:column>
            <h:link value="detail" outcome="detail">
                <f:param name="id" value="#{item.id}" />
            </h:link>
        </p:column>
    </p:dataTable>
    

    【讨论】:

    • 您好 BalusC,感谢您的回答。我实际上使用 h:link 作为第二页的链接。但这仍然是同一个问题。
    • “网页已过期”表示非缓存页面是由 POST 请求打开的。
    • 嗨,BalusC 它在 Opera 中工作,但在 IE 中不工作。我正在使用 MSIE 9。有什么想法吗? IE 一直显示可怕的网页已过期。
    • @frazkok 第一个页面(列表)是如何通过 POST 带来的?从第一页转到第二页(如上所述 GET),当您回击时,如果通过 POST 请求显示第一页,则将再次转到第一页。
    • 第一页是通过 primefaces 带来的。这是一个帖子是吗?如何让它 GET?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-02
    • 1970-01-01
    • 2020-10-22
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    相关资源
    最近更新 更多