編集:私の間違いを理解しています。なぜか私は考えていませんでしたが、previousItems.add(p);
が実行された後、それはfor loop
から出ていました。私は追加して解決しましたbreak
サーブレット内のjava.util.ConcurrentModificationException
他の質問については、解決策を得るのに役立たなかった。
私はServlet
を持っています。これは、別のページからカートにアイテムを追加するときに呼び出されます。
私はを持っています。私はリストを繰り返して、私がリストにすでに追加しようとしているものと同じ製品であるかどうかを確認します。それがすでに存在する場合はその数量を更新します。そうでない場合は、リストに新しい製品を追加します。
いつも同じ製品を追加するとすべて問題なく、別の製品を追加すると例外が発生します。だから私はコード内の問題はelse
の後にあると思う(「This」とコメントされている)。これは、製品が異なる場合に実行されるためである。
@WebServlet(name = "AddCart", urlPatterns = {"/AddCart"})
public class AddCart extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
ArrayList<Product> previousItems = (ArrayList<Product>) session.getAttribute("previousItems");
Product p = (Product) session.getAttribute("currentProduct");
if (previousItems == null) {
previousItems = new ArrayList<Product>();
}
if (p != null) {
if (previousItems.size()>0) {
for (Product p1 : previousItems) {
if (p1.getId() == p.getId()) {
p1.addQuantity();
} else { //This
previousItems.add(p);
}
}
} else {
previousItems.add(p);
}
}
session.setAttribute("previousItems", previousItems);
response.sendRedirect("cart.jsp");
}
}
また、同じ例外のも削除しようとしました。
そして、これはHTTP Status 500 – Internal Server Error
java.util.ConcurrentModificationExceptionが
java.util.ArrayListの$ Itr.checkForComodification(ArrayList.java:901) java.util.ArrayListの$ Itrがあります.next(ArrayList.java:851) servlets.AddCart.doGet(AddCart.java:36) javax.servlet.http.HttpServlet.service(HttpServlet.java:635) javax.servlet.http.HttpServlet.service( HttpServlet.java:742)あなたが
for
ループのArrayList
内部を変更するとorg.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
エラーメッセージが表示されましたか? – GhostCat
はい、私は助けませんでした。私は既にListIteratorsを試してみました。私は解決するために1時間以上を試みてきました。問題はIteratorだとわかっていますが、サーブレットを呼び出すとリストの先頭に再びセットされていませんか? – Mattia
それはそれを反復しながらリストを変更しないことについて何かを教えてくれるでしょう... – GhostCat