上课时候的一个小例子,是个网上书店。书都是放在TreeMap里的,通过迭代显示在页面上,在购物车一个页面里有删除的按钮,但是每次删除时候只能倒序的删除,也就是说第一次买BOOK A,第二次买BOOK B, 第三次买BOOK C,购买以后跳转到该购物车页面后选中一本书删除,只有按照CBA的方法才能正确删除,如果直接选择B或A的话会报异常,(虽然报异常了,但是其实该书也已经被删除了),请问是什么原因?删除的servlet代码如下:
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
int id = Integer.parseInt(req.getParameter("id"));
int amount =Integer.parseInt(req.getParameter(req.getParameter("id")));
HttpSession session = req.getSession();
Map sessionmap = (TreeMap)session.getAttribute("cartList");
Set set = sessionmap.keySet();
Iterator it = set.iterator();
while(it.hasNext()){
int id2 = (Integer)it.next();
if(id==id2){
sessionmap.remove(id);
}
}
req.getRequestDispatcher("/ListCart.jsp").forward(req,resp);
}
请指教。。
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
int id = Integer.parseInt(req.getParameter("id"));
int amount =Integer.parseInt(req.getParameter(req.getParameter("id")));
HttpSession session = req.getSession();
Map sessionmap = (TreeMap)session.getAttribute("cartList");
Set set = sessionmap.keySet();
Iterator it = set.iterator();
while(it.hasNext()){
int id2 = (Integer)it.next();
if(id==id2){
sessionmap.remove(id);
}
}
req.getRequestDispatcher("/ListCart.jsp").forward(req,resp);
}
请指教。。
而是要调用迭代器Iterator.remove.
Iterator it = set.iterator();
while(it.hasNext()){
int id2 = (Integer)it.next();
if(id==id2){
it.remove();
}
}
你好好看看JDK吧