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

请教关于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()这个值,所以以前的都在

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程