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();的区别所造成的问题。请问问题出在哪了?谢谢帮助啦!