最近学到session,做了一个购物车练手,可以实现添加到购物车,但做删除的时候遇到了障碍,
共写了CartItem.java, ShoppingCart.java, addShoppingCartServlet.java, getShoppingCartServlet.java,四个类,其中
CartItem.java 负责物品的属性
ShoppingCart.java 负责购物车的添加和删除
两个Servlet类分别负责添加和显示,测试正常这是ShoppingCart.java里的删除方法
public boolean removeItem(String id){
CartItem cartItem=null;
for(int i=0;i<cart.size();i++){
cartItem=cart.get(i);
if(cartItem.getId().equals(id)){
cart.remove(id);
return true;
}
}
return false;
}删除的调用
out.println("<a href=\"/ShoppingCart/deleteServlet?id="+item.getId()+"\">刪除</a>");这个是deleteServlet.java中的处理
HttpSession session=req.getSession();
ShoppingCart cart=(ShoppingCart)session.getAttribute("shoppingcart");
String id=req.getParameter("id");
if(cart!=null&&id!=null&&!"".equals(id)){
cart.removeItem(id);
out.println("刪除成功!");
}
else{
out.println("刪除失敗!");
}在控制台测试删除方法返回的是true,但getShoppingCartServlet页面仍然为删除前的状态,当将另外一件物品添加到购物车时,购物车列表显示的是删除前的结果,求教原因

解决方案 »

  1.   

    这个是购物车的商品显示
    for(int i=0;i<items.size();i++){
    item=items.get(i);
    out.println("<tr>");
    out.println("<td>");
    out.println(item.getName());
    out.println("</td>");
    out.println("<td>");
    out.println(item.getPrice());
    out.println("</td>");
    out.println("<td>");
    out.println(item.getQuantity());
    out.println("</td>");
    out.println("<td>");
    out.println(item.getSum());
    out.println("</td>");
    out.println("<td>");
    out.println("<a href=\"/ShoppingCart/deleteServlet?id="+item.getId()+"\">刪除</a>");
    out.println("</td>");
    out.println("</tr>");
    }
      

  2.   

    删除了商品后要再次把对象放回session 不然session里面的对象 还是原来的  lz看看是不是这个问题
      

  3.   

    LZ,删除完之后,你的重新把对象放入到session里面
    ,不然也没还是获取的原来的。
      

  4.   

    那我建议LZ自己debug模式多调试看看吧!
      

  5.   

    是这样的,你删除了只是这个对象中的内容。但是session中存在的是你之前的对象,所以你需要做这样一步操作session.setAttribute(attrName,attrValue),
    HttpSession session=req.getSession();         ShoppingCart cart=(ShoppingCart)session.getAttribute("shoppingcart");         String id=req.getParameter("id");         if(cart!=null&&id!=null&&!"".equals(id)){             cart.removeItem(id);             out.println("刪除成功!");         }         else{             out.println("刪除失敗!");         } 上述代码中,只看见你往cart对象中去放内容,没有见到你把这个对象在放回session中。说到这里,我不知道cart对象是不是不需要set到到session中就直接放进去了。  sorry,我技术也不行,我只是提出我的疑问而已。