0

我在我的 JSP 上创建了一个ArrayList基于ProductData类,这个列表表示为一个购物车。

ArrayList<ProductData> cartList = new ArrayList<ProductData>();
ProductData data = new ProductData(productId, productName, productPrice, productAmmount);
cartList.add(data);

之后,我将我的存储ArrayList到 JSP ,因为当我离开此页面时我session不希望我的丢失。ArrayList

session.setAttribute("cartList", cartList);

在另一部分,我得到session并将其转换为ArrayListof ProductData (我检查会话是否为空或不确定)

ArrayList<ProductData> cartList = session.getAttribute("cartList") == null ? new ArrayList<ProductData>() : (ArrayList<ProductData>)session.getAttribute("cartList");

它在第一次运行时运行良好。但是,每次我更改页面上的代码(并且我没有修改我的类声明)时,servlet 都会抛出一个错误:java.lang.ClassCastException: org.apache.jsp.MCPatisserie.cart_jsp$1ProductData

class我的问题是:这是在 java servlet 页面上实现的好方法吗?这个错误是由于重新编译 servlet 页面和session对象不再与我的匹配而引起的ArrayList吗?提前致谢。:)

4

1 回答 1

1

每次更改 JSP 时,容器都会将它重新编译为一个新的 Java 源文件,并将这个新的 Java 源文件重新编译为一个新类。看来您已经在 J​​SP 中定义了一个 Java 类。所以这个类也被重新生成和重新编译。所以会话中的对象有一个与重新创建的不同的类。

JSP 中不应该有 Java 代码。绝对不是类定义。ProductData 应该在它自己的 .java 文件中定义,就像任何其他类一样。

于 2012-12-15T14:20:51.813 回答