2010-07-03 146 views
1

我正在使用Struts/JSP作爲web應用程序。我有一個頁面A,我正在收集用戶定義的參數(因爲請求參數不能使它們成爲會話參數),然後我去頁面B向用戶詢問是/否的問題。如果是的話,我需要回到頁面A並繼續定期處理。但顯然,頁面A的請求對象已經消失。是否有一種方法可以將HttpServletRequest對象作爲屬性傳遞給另一個HttpServletRequest對象

有沒有辦法將頁面A的請求對象設置爲頁面B中的參數,以便當我回到頁面A時,我有第一次在那裏時(第A頁)有同樣的請求對象。

我需要的東西象下面這樣:

頁A - (REQ1)------>頁B(設置req.setAttr( 'prevReq',REQ1))------>頁面A(req = req.getAttr('prevReq'))

任何幫助表示讚賞。

回答

2

不,你不能做你想到的。你瞭解HTTP請求 - 響應週期的工作原理嗎?

  • 用戶使用瀏覽器向服務器發送HTTP請求。
  • 服務器處理請求(調用您的servlet或JSP)。
  • 您的servlet或JSP產生一個通常由HTML頁面組成的響應。
  • 服務器將響應發送回瀏覽器。

您無法保存頁面A的請求,然後在頁面B中響應該請求以使瀏覽器返回頁面A.這不僅僅是請求 - 響應循環的工作原理。

你可以做的是將數據存儲在會話對象中。您可以撥打電話request.getSession()以獲取HttpSession對象,您可以在該對象中存儲該用戶會話期間的數據。在頁面A中,您可以再次從會話對象中獲取數據。

0

使用隱藏的輸入元素(input type="hidden")其中您保留請求參數的表單提交。不要將其複製/存儲爲請求屬性。答覆結束後,他們會迷失方向。因爲我不做Struts,所以這裏有一個基本的例子,JSP應該是什麼樣的(留下輸入標籤和諸如XSS之類的明顯的安全問題,Struts應該足夠聰明來處理它本身)。

網頁A:

<form> 
    <input type="text" name="input1" value="${param.input1}"> 
    <input type="text" name="input2" value="${param.input2}"> 
    <input type="text" name="input3" value="${param.input3}"> 
    <input type="hidden" name="yesorno" value="${param.yesorno}"> 
    <input type="submit" value="go to page B"> 
    <input type="submit" value="submit"> 
</form> 

網頁B

<form> 
    <input type="checkbox" name="yesorno" value="yes" ${!empty param.yesorno ? 'checked' : ''}> 
    <input type="hidden" name="input1" value="${param.input1}"> 
    <input type="hidden" name="input2" value="${param.input2}"> 
    <input type="hidden" name="input3" value="${param.input3}"> 
    <input type="submit"> 
</form> 
相關問題