一个购物车实现的Action,业务很复杂(if,else理了很长时间才理出了头绪!)

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");
 }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值