购物车模块
[if !supportLists]· [endif]添加到购物车
[if !supportLists]o [endif]购物车的javabean
[if !supportLists]· [endif]清空购物车
[if !supportLists]· [endif]从购物车移除一个商品
1.添加到购物车
在单个商品详情页面有如下表单:
用户点击加入购物车按钮后,表单提交到CartServlet中的addCart()方法 (注意商品pid和方法名称都需要通过定义隐藏域的方式进行提交)。
CartServlet中的addCart()方法:
//对购物车添加购物项
public String addCart(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
try {
//获取参数
String pid = request.getParameter("pid");
int count = Integer.parseInt(request.getParameter("count"));
//根据商品pid获取对应的商品对象
ProductService ps =(ProductService)FactoryDemo.getBean("ProductService");
Product product = ps.findBypid(pid);
//创建一个购物项对象
CartItem item = new CartItem();
item.setCount(count);
item.setProduct(product);
//创建一个购物车对象 (唯一)
Cart cart = getCart(request);
//把购物项放在购物车中
cart.add(item);
//重定向到cart.jsp
response.sendRedirect(request.getContextPath()+"/jsp/cart.jsp");
} catch (Exception e) {
}
return null;
}
注意:向购物车中添加购物项,需要保证购物车对象是唯一的,实现唯一的方法是在Servlet中定义一个getCart()方法:
public Cart getCart(HttpServletRequest request){
//获取session对象
HttpSession session = request.getSession();
//从session中获取cart对象
Cart cart = (Cart)session.getAttribute("cart");
//如果session中没有,则new一个实例出来赋给cart并存到session中
if(cart==null){
cart = new Cart();
session.setAttribute("cart",cart);
}
//返回唯一的一个cart对象
return cart;
}
购物车的javabean:
public class Cart implements Serializable
{
//商品的总金额
private double total;
//购物项的集合
Map map=new LinkedHashMap();
//添加购物项--- 总金额=总金额+购物项的小计
public void add(CartItem item)
{
/*
注意下面,购物项的id直接使用了商品的pid,因为都是唯一的。
*/
CartItem _item = map.get(item.getProduct().getPid());
//判断map里面有没有
if(_item==null)
{
//没有 map直接添加 修改总金额=总金额+添加商品的小计
map.put(item.getProduct().getPid(),item);
total=total+item.getSubtotal();
}else
{
//有 把数量累加了=小计自动变化 修改总金额=总金额+添加商品的小计
_item.setCount(_item.getCount()+item.getCount());
total=total+item.getSubtotal();
}
}
//删除购物项--- 总金额=总金额-被删除的购物项小计
public void remove(String key)
{
//删除购物项
CartItem item = map.remove(key);
//总金额=总结额-被删除购物项的小计
total=total-item.getSubtotal();
}
//清空购物项--- 总金额=0
public void removeAll()
{
//清空购物车
map.clear();
//总金额为0
total=0;
}
}
//购物项的 javabean:
//商品的对象
private Product product;
//商品数量
private int count;
//商品小计
private double subtotal;
注意:购物车中定义了购物项的Map集合(还有购物车的总金额),而购物项中又定义了商品对象(还有该商品的数量和小计)。用图片来理解设计思路:
2. 清空购物车
Cart cart = getCart(request);
cart.removeAll();
//重定向到cart.jsp
response.sendRedirect(request.getContextPath()+"/jsp/cart.jsp");
3.从购物车移除一个商品
String key = request.getParameter("id");
Cart cart = getCart(request);
cart.remove(key);
//重定向到cart.jsp
response.sendRedirect(request.getContextPath()+"/jsp/cart.jsp");