【问题标题】:Spring mvc result page and back browser buttonSpring mvc结果页面和返回浏览器按钮
【发布时间】:2012-06-20 13:43:33
【问题描述】:

在我的 MVC spring 应用程序中,我使用 post 方法将表单发送到页面,以使用一些参数执行搜索。搜索结果是一个列表,并且对于每个条目都可以导航到详细信息页面。它工作正常,但是,当用户尝试使用返回浏览器按钮(或 Javascript)返回结果页面时,我收到“过期页面”错误。刷新页面,它重新执行帖子提交并且工作正常。

为了防止这个错误我添加了

response.setHeader("Cache-Control", "no-cache");

到搜索控制器,Safari 和 Firefox 一切正常,但是当我尝试使用 IE(8 和 9)执行 Web 应用程序时,我得到相同的“过期页面”错误。

转到详细信息页面并返回而不会出现任何错误的正确方法是什么?

感谢您的宝贵时间!
安德烈亚

【问题讨论】:

    标签: java spring jakarta-ee spring-mvc


    【解决方案1】:

    正确的做法是使用GET而不是POST:搜索是幂等操作,不会对服务器造成任何改变,这样的操作应该使用GET来完成。

    【讨论】:

      【解决方案2】:

      不使 POST 请求过期似乎会破坏the very idea of a POST

      根据 RFC 2616,POST 方法应用于请求非幂等的任何上下文:也就是说,每次执行请求时都会导致服务器状态发生变化,例如向博客文章提交评论或在线投票。

      相反,我会重组您查看详细记录的方式,可能会使用覆盖DIV,它不会刷新显示结果的基础页面。对于许多现代 Web 应用程序,使用 BACK 按钮可能会导致页面流程出现问题。

      【讨论】:

      • 我理解你的观点,基本上我同意,但在这种情况下,我需要重构应用程序的很大一部分。每次我回到我的页面时,有没有办法重新提交价值? (即在会话中存储表单参数?使用@ModelAttribute 似乎无法做到这一点
      • 如果是这种情况,您的页面后退按钮不应该只是返回历史记录中的 1;而是在您的处理程序方法中获取参数并将它们添加回Model,以便您可以将它们发送回 JSP 以供重用。后退按钮可以是旧表单的提交。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-05
      • 1970-01-01
      • 2013-07-19
      • 2012-12-08
      相关资源
      最近更新 更多