2008-10-23 60 views

回答

23

不幸的是,Request對象只有在頁面加載完成後纔可用 - 一旦完成,您將失去所有值,除非它們已經存儲在某個地方。

如果你想堅持通過請求屬性,您需要:

  1. 有一個隱藏的輸入您的形式,如<input type="hidden" name="myhiddenvalue" value="<%= request.getParameter("value") %>" />。這將作爲請求參數在servlet中可用。
  2. 把它放在會議(見request.getSession() - 在JSP這可作爲簡單session

我建議使用會話,因爲它更易於管理。

+0

也許這不是不幸。 JSP腳本是一個不好的習慣。使用會話時要小心,管理起來比較容易,但有時在可伸縮性方面它是「昂貴的」。 – 2008-10-23 14:43:33

1

糾正我,如果錯了...我想請求不連續的頁面之間仍然存在..

認爲你從第1頁穿越 - >第3頁。

您有一定的價值 - 2>頁使用getAttribute在頁面2中檢索到的頁面1中的setAttribute設置請求對象,然後如果您嘗試在同一個請求對象中再次設置某些內容以在頁面3中檢索它,那麼它將給予您空值作爲「創建的請求JSP和提交JSP時生成的請求是完全不同的請求,並且放在第一個上的任何屬性在第二個上將不可用「。

我的意思是在第2頁是這樣的失敗:

凡爲同樣的事情已經在第1頁的情況下,像工作:

所以我想我會需要進行任Phill建議的兩個選項。

4

Phil Sacre的回覆是正確的,但是會話不應該只用於它的地獄。您只應將此用於確實需要在會話的整個生命週期中生存的值,例如用戶登錄。通常會看到人們過度使用會話並遇到更多問題,特別是在處理收藏或用戶返回他們以前訪問過的頁面時,只發現他們的值仍然來自上次訪問。一個聰明的程序儘可能地減少變量的範圍,壞的程序會使用會話太多。

0

我認爲菲爾是正確的請求選項是可用的,直到頁面加載。所以如果我們想將價值發送到另一個頁面,我們希望將其設置在隱藏標籤中或在會話中設置,如果您只需要其他頁面上的值而不超過該值,那麼隱藏標籤是最好的選擇,如果您需要該值在當時的多個頁面上,會話比隱藏的標籤更好。

2

嘗試

request.getSession().setAttribute("SUBFAMILY", subFam); 
request.getSession().getAttribute("SUBFAMILY"); 
4

如果你希望你的要求仍然存在,試試這個:

例如:你的JSP或Servlet頁面

request.getSession().setAttribute("SUBFAMILY", subFam); 

上任何接收頁面上使用下面的線路檢索您的會話和數據:

SubFamily subFam = (SubFamily)request.getSession().getAttribute("SUBFAMILY"); 
3

你可以做到這一點使用的pageContext屬性,雖然:

在JSP:

<form action="Enter.do"> 
    <button type="SUBMIT" id="btnSubmit" name="btnSubmit">SUBMIT</button> 
</form> 
<% String s="opportunity"; 
pageContext.setAttribute("opp", s, PageContext.APPLICATION_SCOPE); %> 

在Servlet(鏈接到 「Enter.do」 的url-pattern):

String s=(String) request.getServletContext().getAttribute("opp"); 

除了APPLICATION_SCOPE之外,還有其他一些作用域,比如SESSION_SCOPE。 APPLICATION_SCOPE用於ServletContext屬性。