package com.itcast.web.action.product.shopping;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.springframework.stereotype.Controller;
import com.itcast.bean.product.BuyCart;
import com.itcast.bean.product.BuyItem;
import com.itcast.bean.product.ProductInfo;
import com.itcast.bean.product.ProductStyle;
import com.itcast.service.product.ProductInfoService;
import com.itcast.util.SiteSessionListener;
import com.itcast.util.WebUtil;
import com.itcast.web.formbean.product.CartForm;
@Controller("/shopping/cart")
public class CartAction extends Action {
@Resource(name="productInfoServiceBean")
private ProductInfoService productInfoService;
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
CartForm cartForm = (CartForm)form;
//先查看用户当前所在的session(即用户当前的浏览器中是否有购物车)
BuyCart buycart = (BuyCart)request.getSession().getAttribute("buycart");
if(buycart == null){
//如果当前浏览器中购物车为空,还不能直接创建一个购物车,因为用户很有可能是重新打开了一个浏览器,
//所以要先通过cookie查看之前的session中是否有购物车
String sid = WebUtil.getCookieByName(request, "buyCartSessionID");
//System.out.println("buycart == null之前的浏览器中有购物车,之前的那个session的ID是: " + sid);
//如果客户端保存了那个有购物车的session
if(sid != null){
//System.out.println("sid!=null");
HttpSession session = SiteSessionListener.getSession(sid);
//这里为什么还要进行sessio是否为空的判断呢,因为可能cookie的存储时间比服务器中的session存储时间长
if(session != null){
//System.out.println("session!=null");
buycart = (BuyCart)session.getAttribute("buycart");
//一旦得到了购物车,就可以删除之前的session,将当前的session保存到cookie当中去
SiteSessionListener.removeSession(sid);
request.getSession().setAttribute("buycart", buycart);
//这里的buyCartSessionID是这样的一个session,即一定是含有购物车的session
WebUtil.addCookie(response, "buyCartSessionID", request.getSession().getId(), request.getSession().getMaxInactiveInterval());
}else{//session == null的情况
//System.out.println("session==null");
buycart = new BuyCart();
request.getSession().setAttribute("buycart", buycart);
//一旦创建了购物车以后,就将当前session保存到cookie当中
WebUtil.addCookie(response, "buyCartSessionID", request.getSession().getId(), request.getSession().getMaxInactiveInterval());
}
}else{//sid == null的情况,即如果客户端没有有购物车的那个session
//System.out.println("sid==null");
buycart = new BuyCart();
request.getSession().setAttribute("buycart", buycart);
//一旦创建了购物车以后,就将当前session保存到cookie当中
WebUtil.addCookie(response, "buyCartSessionID", request.getSession().getId(), request.getSession().getMaxInactiveInterval());
}
}
//得到product和style
if(cartForm.getProductid()!=null && cartForm.getProductid()>0 ){
ProductInfo product = productInfoService.find(ProductInfo.class, cartForm.getProductid());
ProductStyle currentStyle = null;
for(ProductStyle style : product.getStyles()){
if(style.getVisible() && style.getId().equals(cartForm.getStyleid())){
currentStyle = style;
}
}
//这里是不会更该数据库中的数据的,因为在product和style的关联中,product是被维护端
product.getStyles().clear();//清楚所有样式,
if(currentStyle != null) product.addProductStyle(currentStyle);//只放入购买选中的样式
buycart.addItem(new BuyItem(product,1));//将选择购买的产品放入购物车,默认的数量是1
//System.out.println("已经向购物车里添加了购物项,谢谢");
}
request.setAttribute("buycart", buycart);
return mapping.findForward("cart");
}
}