2012-06-20 154 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