0

ArrayListJSPでクラスに基づいて作成しますProductData。このリストは、ショッピングカートとして表されます。

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

その後、ArrayListJSPに保存しています。このページを離れるときに、迷子にsessionならないようにするためです。ArrayList

session.setAttribute("cartList", cartList);

他のセクションでは、を取得してのsessionとして変換し ます(セッションがnullかどうかを確認します)ArrayListProductData

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

それは最初の実行でうまく機能します。ただし、ページのコードを変更するたびに(そして、クラス宣言を変更しない場合)、サーブレットはエラーを発生させます。java.lang.ClassCastException: org.apache.jsp.MCPatisserie.cart_jsp$1ProductData

私の質問は、これはclassJavaサーブレットページに実装するための良い方法ですか?このエラーはサーブレットページの再コンパイルが原因で、sessionオブジェクトが私のものと一致しなくなりましたArrayListか?前もって感謝します。:)

4

1 に答える 1

1

JSPを変更するたびに、コンテナはそれを新しいJavaソースファイルに再コンパイルし、この新しいJavaソースファイルを新しいクラスに再コンパイルします。JSP内でJavaクラスを定義したようです。したがって、このクラスも再生成および再コンパイルされます。したがって、セッション内のオブジェクトには、再作成されたものと同じではないクラスがあります。

JSPにJavaコードを含めるべきではありません。そして間違いなくクラス定義ではありません。ProductDataは、他のクラスと同様に、独自の.javaファイルで定義する必要があります。

于 2012-12-15T14:20:51.813 に答える