2011-04-10 67 views
1

我設置在名爲cartList的servlet這是這樣一個字符串數組一個會話屬性,讀取會話屬性中的jsp

request.getSession().setAttribute("cartList", items); 

其中物品是String類型的對象的數組。

在JSP,我打電話這樣上述屬性,

line123:String[] cartItems = (String[]) request.getSession().getAttribute("cartList"); 
line124:for (int i = 0; i < cartItems.length; i++) { 
    line125:String[] cartItem = cartItems[i].split("\\|"); 

cartItems [Ⅰ]將永遠不會是空的,並且將包含這樣的字符串,[AAA-000 | 2]。

我在第125行收到一個異常,它是一個nullpointerexception。我不知道爲什麼我得到這個錯誤。我正在檢查servlet中'items'的內容,它很好,並且不是空的。 我花了一整天的時間來解決這個問題。我在智慧的結尾!任何幫助表示讚賞!

+0

你確定在jsp中的值是否被正確提取?也在jsp中你有一個內置的會話變量,無需編寫request.getSession(); – 2011-04-10 06:07:38

+0

感謝您的快速響應。我不知道該值是否在jsp中正確提取。我如何檢查?我認爲request.getSession()是訪問會話屬性的唯一方法。我不需要會話對象訪問會話屬性,並獲得會話對象我不必做request.getSession()? – sherry 2011-04-10 06:32:19

+0

@ user686997:檢查只是簡單地把'System.out.println(carItems);'從jsp中的session中獲取值之後。 – 2011-04-10 06:35:36

回答

1

問題不是你沒有從會話獲得cartItems。問題是cartItems的某些值包含空值。在調用split()之前,請打印cartItems[i]的值以查看它攜帶的內容。

String[] cartItems = (String[]) request.getSession().getAttribute("cartList"); 
for (int i = 0; i < cartItems.length; i++) { 
    out.println("cartItems["+i+"]: "+cartItems[i]); 
    String[] cartItem = null; 
    if(cartItems[i]!=null) 
     cartItem = cartItems[i].split("\\|"); 
} 

如果你看到null一些值,回到你的servlet,並確保你將它們放入cartList前爲它們分配一定的價值。

+0

@craftsmen:您的代碼片段幫助我意識到數組中存在空值。我現在修好了。謝謝! – sherry 2011-04-10 07:08:47

+0

@sherry歡迎您:)順便說一句,只是一個建議:在這種情況下使用調試器是非常有用的,併爲您節省了大量的時間。 – craftsman 2011-04-10 07:14:16

+0

關於如何使用調試器的任何建議?到目前爲止,我一直在使用打印語句。 – sherry 2011-04-10 07:17:26