public ActionForward putInCart(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { 
ProductBiz biz = new ProductBizImpl();//得到biz对象 
//获得参数serialNum 
String serialNum = request.getParameter("serialNum"); 
//调用biz的查找方法 
Product product=biz.findBySerialNum(serialNum); 
//获得session 
HttpSession session = request.getSession(); 
Cart cart = (Cart)session.getAttribute("cart"); Set<Item> items = null; 
if(cart==null||cart.getItems().size()==0){ 
cart = new Cart(); 
items = new HashSet<Item>(); 
cart.setItems(items); 
Item item = new Item(); 
item.setProduct(product); 
item.setCount(1); 
items.add(item); 
}else{ 
items = cart.getItems(); 
Item item = new Item(); //判断购物车中是否已经有该商品,如果有则数量+1 
Iterator it = items.iterator(); 
while(it.hasNext()){ 
Item i = (Item)it.next(); //就是这里,遍历集合有时会报异常
if(i.getProduct().getSerialNum().equals(serialNum)){ Product p = i.getProduct(); 
int count = i.getCount(); 
it.remove(); 
Item ii = new Item(); 
ii.setProduct(p); 
ii.setCount(count+1); 
items.add(ii); 
}else{ 
item.setProduct(product); 
item.setCount(1); 
items.add(item); 

} } session.setAttribute("cart", cart); 
return mapping.findForward("ok"); 
}

解决方案 »

  1.   

    迭代的时候不能对容器进行删除操作
    it.remove();   // 应该是这里报错的可以用个 临时变量把要删除的元素 先存起来;  迭代完后,再根据临时变量进行删除操作;
      

  2.   

    刚才 google 了一把; 
    似乎 我说错了; 不好意思!!
    it.remove();  是Iterator  自己实现的 同步删除方法, 所以不会出现我说的情况;你能贴一下 报错日志吗?
      

  3.   

    是不是i.getProduct().getSerialNum()为null啊