日期:2014-05-18  浏览次数:20827 次

java.util.ConcurrentModificationException 高手帮忙看哈!!最好耐心的看
在网上搜了哈关于这个错误的java.util.ConcurrentModificationException信息,
是Collection等,添加Iterator后,在循环内修改是发生的错误。
不知我说的对否?

我这个问题就是:在showcart.jsp页面已经有多个book条目,现在要修改每个book的数量后,update时,就会出现以上信息。

下面是我的代码片段:

显示页面:shwocart.jsp 显示购物车信息
HTML code

...
<%
    Cart cart = (Cart) session.getAttribute("cart");
    if (session.getAttribute("cart") == null) {
        cart = new Cart();
    }
%>
...

<form action="cartAction.jsp?action=update" method="post">
<table border="1" width="65%" align="center">
    <tr>
        <td>&nbsp;编号</td>
        <td>&nbsp;书名</td>
        <td>&nbsp;作者</td>
        <td>&nbsp;数量</td>
        <td>&nbsp;单价</td>
        <td>&nbsp;总价</td>
        <td>&nbsp; <a href="cartAction.jsp?action=clear">清空购物车</a>&nbsp;
        </td>
    </tr>
    <%
        for (Iterator<CartItem> iterator = cart.getItems().iterator(); iterator.hasNext(); ) {
            CartItem item = (CartItem) iterator.next();
    %>
    <tr>
        <td>&nbsp; <a
            href="bookAction.jsp?action=bookdetail&bookId=<%=item.getItem().getBookId()%>"><%=item.getItem().getBookId()%></a>
        </td>
        <td>&nbsp;<%=item.getItem().getTitle()%></td>
        <td>&nbsp;<%=item.getItem().getName()%></td>
        <!-- 这里文本框名字按bookId命名 -->
        <td>&nbsp; <input name="<%=item.getItem().getBookId()%>" type="text" value="<%=item.getQuantity()%>" size="4"></td>
        <td>&nbsp;¥<%=item.getItem().getPrice()%></td>
        <td>&nbsp;¥<%=item.getItemPrice()%></td>
        <td>&nbsp; <a
            href="cartAction.jsp?action=remove&bookId=<%=item.getItem().getBookId()%>">删除</a>
        </td>
    </tr>
    <%
        }
    %>
    <tr>
        <td colspan="6" align="right">&nbsp;总计:¥<%=cart.getAmount()%> <br>
        <input type="submit" value="更新"></td>
        <td>&nbsp;</td>
    </tr>
    <tr>
        <td colspan="7" align="center"><a
            href="userAction.jsp?action=pay">付款</a></td>
    </tr>
</table>
</form>
...




处理页面:cartAction.jsp 处理购物车所有动作
HTML code

<%
...
    String action = request.getParameter("action");
    String bookId = request.getParameter("bookId");
    
    Cart cart = (Cart)session.getAttribute("cart");
...

    if ("update".equals(action)) {
        for(Iterator<CartItem> iterator = cart.getItems().iterator(); iterator.hasNext(); ) {
            CartItem item = (CartItem)iterator.next();
            String key = item.getItem().getBookId();
            int value = Integer.parseInt(request.getParameter(key));
            if(value > 0) {
                cart.update(key, value);                    
            }else{
                request.setAttribute("info", "输入数量至少为1");
            }
        }
        session.setAttribute("cart", cart);
        pageContext.forward("showcart.jsp");
    }
...
%>



Bean文件: