【问题标题】:How can I change the back button function in navigation toolbar?如何更改导航工具栏中的后退按钮功能?
【发布时间】:2011-08-16 19:55:29
【问题描述】:

我使用 JSP 开发了一个简单的 Web 应用程序。它有一个登录页面,其中包含用户名、密码字段和 sumbit 按钮。它有一个注销页面,其中包含指向登录页面的链接。还有一些页面,比如page1、page2、page3、page4等。

正常的工作流程如下:

  • 登录后进入page1。
  • 然后点击一些动作,它会转到第2页。
  • 然后点击一些动作,它会转到第3页。
  • 然后单击一些操作,它将转到第 4 页。所以现在我在第 4 页。
  • 现在点击浏览器导航工具栏中的后退按钮,一般会转到上一页(page3)。

但我的要求是,如果您从应用程序的任何页面单击导航工具栏中的返回按钮,那么您应该转到注销页面。例如:如果您在第4页并按下返回按钮,那么您应该转到注销页面而不是第3页。

如何做到这一点?反正有可能吗?也许使用 Javascript?


如何跟踪和控制导航工具栏中的浏览器后退按钮功能?

但我原来的要求:

我已经使用 JSF 框架开发了安全应用程序。

而且我也使用范围(会话范围)

在我的应用程序中,我使用以下代码...但无法正常工作...

public class **LogoutPhaseListener** implements **PhaseListener**
{

 public void **afterPhase**(PhaseEvent event)
 {
 }


 public void **beforePhase**(PhaseEvent event)
 {

        FacesContext facesContext = event.getFacesContext();
        HttpServletResponse httpServletResponse = (HttpServletResponse) facesContext.getExternalContext().getResponse();
        httpServletResponse.addHeader("Pragma", "no-cache");
        httpServletResponse.addHeader("Cache-Control", "no-cache");
        httpServletResponse.addHeader("Cache-Control", "must-revalidate");
        httpServletResponse.addHeader("Expires", "Mon, 8 Aug 2006 10:00:00 GMT");
        httpServletResponse.addHeader("Cache-Control", "no-store");
 }


 public PhaseId **getPhaseId**()
 {

        return PhaseId.RENDER_RESPONSE;
 }

}

如果我点击浏览器中的返回按钮,那么它会转到上一页...

但我想退出页面..当我点击浏览器中的后退按钮...上面的代码完美地工作..

【问题讨论】:

    标签: javascript jsp


    【解决方案1】:

    如果您在会话范围内维护一个指示当前步骤的令牌,并且通过相应地设置 response headers 来禁用客户端缓存,那么理论上是可能的。如果您使用 POST,则还需要实现 PRG (post-redirect-get) 模式以避免客户端收到“页面过期”错误。

    登录后到第1页之前,将1存储在会话中。在提交 page1 之后,在转到 page2 之前,将2 存储在会话中。等等。每次请求页面时,检查请求的页面以及页码是否等于会话中的数字,如果不是,则重定向到注销页面。

    如果您禁用客户端缓存并实现 PRG,则客户端将保证触发 真实 GET 请求,而不是从浏览器缓存中请求页面。

    【讨论】:

    猜你喜欢
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    • 2019-01-16
    • 1970-01-01
    • 2015-04-28
    相关资源
    最近更新 更多