2011-04-12 89 views
0

我有一個Java servlet會話相關的問題。我不明白爲什麼使用會話對象的getAttribute()功能之前setAttribute();下面是代碼:HttpSession,session.getAttribute(),問題

Vector buylist=(Vector)session.getAttribute("Register"); 
if (action.equals("del")) { 
String del = request.getParameter("deli"); 
int d = (new Integer(del)).intValue(); 
buylist.removeElementAt(d); 
} 
session.setAttribute("Register", buylist); 

感謝。

+1

詢問編寫它的同事。或者你們通過stackoverflow進行通信? :-) – 2011-04-12 08:03:08

+0

可能是他閱讀教程。 – 2011-04-12 08:03:51

回答

0

因爲Register屬性可以從別的地方來設置(。就像從JSP(在不好的情況下),Servlet或者過濾器)

0

我能想到的唯一解釋是:所有你第一次您檢索向量,然後進行更改並將其存儲回會話對象之後。

0

代碼被破壞或setAttribute()是徒勞的。

如果您從會話中獲得可變容器(如列表或向量),則無需再將其放入會話中。這是相當於這個代碼:

session.setAttribute("Register", buylist); 
session.setAttribute("Register", buylist); 
session.setAttribute("Register", buylist); 

沒有,但第一行有效果。

另一種可能是代碼有缺陷,真正本來是是這樣的:

Vector buylist = session.getAttribute("Register"); 
if(buylist == null) { 
    buylist = new Vector(); 
    session.setAttribute("Register", buylist); 
} 

即創建一個新的載體,如果不存在的話。

+1

我不明白一件事,是不是應該先設置屬性,然後使用getAttribute方法進行會話! 當代碼沒有被定義在任何地方時,代碼如何使用「Register」屬性,定義屬性「Register」的唯一方法是使用setAttribue(),然後使用getAttribute將其存儲在會話中! – ARAZA 2011-04-12 14:29:57

+0

'getAttribute()'將爲未知屬性返回'null'。您發佈的代碼僅適用於其他人已將「註冊」屬性放入會話中的情況。既然你沒有得到NPE,那肯定會發生。 – 2011-04-13 09:51:58

1

此代碼旨在保存由註冊會話屬性表示的已修改向量。 但是,即使某些元素被刪除或添加後,您不需要設置該屬性,因爲無論如何它存儲在會話中的參考以及對​​它的任何更改實質上都應用於相同的對象。