站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题关于java.lang.ClassCastException:的问题

关于java.lang.ClassCastException:的问题

摘要: 关于java.lang.ClassCastException:的问题


在a.jsp这样写,把List set到session里面,然后重定向到b.jsp

shoppingcart sc = new shoppingcart();
sc.setCommid("comm00005");
sc.setCommname("呵呵");
sc.setAmount(10);
List getarray = new ArrayList();
getarray.add(sc);
session.setAttribute("sp",getarray);
response.sendRedirect("b.jsp");

在b.jsp里面这样写

List list=(List)session.getAttribute("sp");
shoppingcart sc=(shoppingcart )list.get(0);

这样就报
java.lang.ClassCastException


为什么会这样呢?


这个错误出现得非常怪,

是不是你的shoppingcart有问题中啊,比如没实现序列化接口


看一下是哪行报的这个错
应该是 List list=(List)session.getAttribute("sp"); 报的,你看一下getAttribute返回的是不是一个Object[],如果是就改成 List list=(List)(session.getAttribute("sp")[0])



楼上说的没错

ClassCastException是类型进行转换时抛出的异常,比如继承链上向下的错误转换


List list=(ArrayList)session.getAttribute("sp");

看看这样行不?


是在shoppingcart sc=(shoppingcart )list.get(0);这一句报的exception


那就不清楚了,邪门了。


如果不重定向到b.jsp,直接在a.jsp里面写

List list=(List)session.getAttribute("sp");
shoppingcart sc=(shoppingcart )list.get(0);

这个是可以的,没有报exception

为什么跳转以后,就不行呢?

郁闷



有人知道这个是什么原因吗?





List list=(List)session.getAttribute("sp");
Iterator it = list.iterator();
if(it !=null && it.hasNext())
shoppingcart sc=(shoppingcart )it.next();


你打出来你取出来的类看看是什么类
System.out.println(list.get(0).getClass.toString());



打出来的类是class org.apache.jsp.shopcart_jsp$shoppingcart


那说明你的代码有问题,不应该将shoppingcart定义在jsp中,应该另外写一个单独的java文件。


ChDw(米) 能具体说一下,为什么呢?


因为你的JSP修改了,导致这个shoppingcart重新编译了。
新的shoppingcart已经不再是旧的shoppingcart,这样你看起来它们的名字是相同的,但是实际上已经不是同一个类。所以会报错。

其实你重新启动一次Tomcat之类的Web服务器也是可以的,不过这样的代码实在是不好,JSP的逻辑应该尽可能的简单。


↑返回目录
前一篇: 滚动条问题```急```
后一篇: 关于内部类