塌鼻子巴巴鲁
2018-10-17 03:59
采纳率: 45.5%
浏览 347
已采纳

请教关于session域的问题,请热心人帮忙?

 public class Cart {//购物车类
                private Map<String,CartItem> cartItems = new HashMap<String, CartItem>();
                private double total;

                public Map<String, CartItem> getCartItems() {
                    return cartItems;
                }
                public void setCartItems(Map<String, CartItem> cartItems) {
                    this.cartItems = cartItems;
                }
                public double getTotal() {
                    return total;
                }
                public void setTotal(double total) {
                    this.total = total;
                }
}
 public class CartItem {//购物车中的每一项类

                        private Product product;
                        private int buyNum;
                        private double subTotal;
                        public Product getProduct() {
                            return product;
                        }
                        public void setProduct(Product product) {
                            this.product = product;
                        }
                        public int getBuyNum() {
                            return buyNum;
                        }
                        public void setBuyNum(int buyNum) {
                            this.buyNum = buyNum;
                        }
                        public double getSubTotal() {
                            return subTotal;
                        }
                        public void setSubTotal(double subTotal) {
                            this.subTotal = subTotal;
                        }
}
    //5.添加商品到购物车的方法
    public void addProductToCart(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                    HttpSession session = request.getSession();
                    //session.setAttribute("name", "name");
                    //获得pid
                    String pid = request.getParameter("pid");
                    //通过pid查询相应的商品
                    ProductService service = new ProductService();
                    Product product = service.findDetail(pid);
                    //创建CartItem,并封装cartitem
                    CartItem cartItem = new CartItem();
                    cartItem.setProduct(product);
                    //获得buyNum,并封装到cartitem
                    int buyNum = Integer.parseInt(request.getParameter("buyNum"));
                    cartItem.setBuyNum(buyNum);
                    //封装subTotal,并封装到cartitem
                    double subTotal =  buyNum*product.getShop_price();
                    cartItem.setSubTotal(subTotal);//购物车项以封装好
                    //判断session中有没有cart购物车,如果有,直接将购物车项装进去,如果没有,先创建购物车,再将购物车项装进去
                    Cart cart = (Cart) session.getAttribute("cart");
                    System.out.println(cart);
                    //System.out.println(cart.getCartItems());
                    if(cart == null) {
                        cart = new Cart();
                    }
                    **Map<String, CartItem> map = new HashMap<String, CartItem>();
                    map.put(product.getPid(), cartItem);
                    cart.setCartItems(map);//购物车项以装入购物车**

                    _Map<String, CartItem> map = cart.getCartItems();
                    map.put(product.getPid(), cartItem);
                    cart.setCartItems(map);//购物车项以装入购物车_

                    //封装double total
                    double total = 0;
                    total += cartItem.getSubTotal();
                    cart.setTotal(total);//购物车以封装好
                    //将购物车装进session
                    session.setAttribute("cart", cart);
                    response.sendRedirect(request.getContextPath()+"/cart.jsp");
                }
}

问题是这样的:当使用方法中加粗的那段代码时,每次购买商品,点击添加购物车,访问此方法后转到cart.jsp购物车页面时,都只有当前添加入购物车的商品,并没有之前添加的商品,相当于之前存入session中的购物车对象cart被清空了。而方法中使用斜体那段代码时,每次购买商品,点击添加购物车,访问此方法后转到cart.jsp购物车页面时,当前加入购物车的商品和之前的商品都存在,相当于之前存入session中的购物车对象cart没有被清空。
即:Map map = new HashMap(); 和 Map map = cart.getCartItems();的区别所造成的问题。请问问题出在哪了?谢谢帮助啦!

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • 土豆_ 2018-10-17 04:03
    已采纳

    Map map = new HashMap(); 这个是新new一个Map,map里面什么都没有
    Map map = cart.getCartItems();这个map是取得cart.getCartItems()这个值,所以以前的都在

    已采纳该答案
    打赏 评论

相关推荐 更多相似问题