在a.jsp这样写,把List set到session里面,然后重定向到b.jspshoppingcart 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
为什么会这样呢?

解决方案 »

  1.   

    这个错误出现得非常怪,是不是你的shoppingcart有问题中啊,比如没实现序列化接口
      

  2.   

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

  3.   

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

  4.   

    List list=(ArrayList)session.getAttribute("sp");看看这样行不?
      

  5.   

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

  6.   

    如果不重定向到b.jsp,直接在a.jsp里面写List list=(List)session.getAttribute("sp");
    shoppingcart sc=(shoppingcart )list.get(0);这个是可以的,没有报exception为什么跳转以后,就不行呢?郁闷
      

  7.   

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

  8.   

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

  9.   

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

  10.   

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

  11.   

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

  12.   

    因为你的JSP修改了,导致这个shoppingcart重新编译了。
    新的shoppingcart已经不再是旧的shoppingcart,这样你看起来它们的名字是相同的,但是实际上已经不是同一个类。所以会报错。其实你重新启动一次Tomcat之类的Web服务器也是可以的,不过这样的代码实在是不好,JSP的逻辑应该尽可能的简单。