2011-04-10 68 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