2012-06-20 155 views
1

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

要避免这个错误,我添加

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

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

什么是正确的方式去一个详细页面,回来没有得到任何错误?

感谢您的时间!
安德烈

回答

3

正确的方法是使用GET而不是POST:搜索是一种幂等操作,它不会导致服务器发生任何更改,并且这些操作应该使用GET完成。

2

未到期POST请求似乎破坏the very idea of a POST

每RFC 2616,应用于任何上下文中的请求是非幂等POST方法:即,它会导致一每次执行时都会在服务器状态中进行更改,例如向博客文章提交评论或在线投票进行投票。

相反,我会重构如何查看详细记录,也许覆盖DIV不会刷新显示结果的底层页面。对于许多现代Web应用程序,使用BACK按钮可能会导致页面流动问题。

+0

我明白你的观点,基本上我同意,但在这种情况下,我需要重构大部分应用程序。每当我回到我的页面时,是否有方法重新提交值? (即在会话中存储表单参数?使用@ModelAttribute似乎不可能做到这一点 –

+0

如果是这样的话,您的页面后退按钮不应该只回到历史记录1;而是在处理程序方法中抓取参数并将它们添加回'Model',以便您可以将它们发送回JSP以供重用。后退按钮可以是旧形式的提交。 – atrain