2010-04-17 23 views

回答

1

你也可以將其存儲在會話中,但這將是性能密集型服務器端。 如果你有幾個字段(比如說每個用戶總共有2Kb),那麼這可以起作用,尤其是當你的表單被分成3頁以上的頁面時,這個功能尤其有用。

還記得在表單提交到最後一頁後,從會話中過期的對象。

1

查看關於REST的文章,REST是整個Web基於的架構風格。通過遵循這些有關客戶端狀態存儲的指導原則,您可以讓Web應用程序在出現意外事件時向用戶顯示正確的信息。 http://www.xfront.com/REST-Web-Services.html。實際上,您希望存儲客戶端上的整個上下文(在cookie中,或保存在當前頁面中,並使用POST傳回服務器),而不是利用服務器上的任何上下文。在這樣做的過程中,即使服務器沒有存儲上下文,客戶端也可以使用本地上下文在進程的當前'位置'引導進程。

0

如果您使用POST提交表單,並且您使用瀏覽器後退按鈕返回此頁面,那麼您依賴於HTTP響應緩存設置,瀏覽器緩存設置和瀏覽器默認行爲是否會重新生成輸入值與否。大多數會默認重新生成值,但您不希望依賴於客戶端行爲。如果緩存被禁用,那麼例如IE仍然會重新生成值,但FF不會。另外,如果從服務器端強制禁用緩存,則客戶端可能面臨侵入式和瀏覽器特定的「您確定要重新發送數據嗎?」確認對話。

你最好的選擇是提交的數據存儲在會話範圍形式自己提供Back按鈕旁邊的SubmitNext按鈕。這樣最終用戶可以更直觀地瀏覽回來。

您可以使用HttpSession#setAttribute()到將請求轉發到下一個頁面之前在會話範圍提交的數據存儲:

HttpSession session = request.getSession(); 
session.setAttribute("data", data); 

在隨後的頁面,當然你可以拿回來通過HttpSession#getAttribute(),所以您可以添加/修改下一步的新值。

Data data = (Data) session.setAttribute("data"); 

在頁面中,你可以使用EL通常的方式重新顯示提交的數據在value屬性輸入字段:

<input type="text" name="foo" value="${data.foo}"> 

提供Back按鈕,自己卻不能阻止用戶點擊瀏覽器自己的後退按鈕或按退格鍵。你不能對此做太多的事情。您最好的選擇是嚴格禁用頁面緩存,以便客戶端將獲得「您確定要重新發送數據嗎?」警告。您可以通過將以下標題添加到相關頁面的響應中,從服務器端強制禁用客戶端緩存:

response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1. 
response.setHeader("Pragma", "no-cache"); // HTTP 1.0. 
response.setDateHeader("Expires", 0); // Proxies. 
相關問題