【j2ee spring】46、巴巴运动网——购物车

来源:互联网 发布:js怎么在元素创建属性 编辑:程序博客网 时间:2024/05/16 15:33

巴巴运动网——购物车

1、项目目录结构

这里写图片描述

这里写图片描述

这里写图片描述

2、项目代码

BuyItem.java

一个购物车里面需要的一些属性,我们构建一个购物车bean,购物车里面每一件商品都有
1) 购买的商品
2) 购买的数量

/** * 功能:这个是一个购物车的清单 * 时间:2015年6月6日08:50:06 * 文件:BuyItem.java * 作者:cutter_point */package com.cutter_point.bean;import com.cutter_point.bean.product.ProductInfo;import com.cutter_point.bean.product.ProductStyle;public class BuyItem {    /** 购买的商品 **/    private ProductInfo product;    /** 购买的数量 **/    private int amount;    public BuyItem(ProductInfo product) {        this.product = product;    }    public BuyItem(ProductInfo product, int amount) {        this.product = product;        this.amount = amount;    }    public ProductInfo getProduct() {        return product;    }    public void setProduct(ProductInfo product) {        this.product = product;    }    public int getAmount() {        return amount;    }    public void setAmount(int amount) {        this.amount = amount;    }    @Override    public int hashCode() {        String buyitem = product.hashCode() + "-";        if(product.getStyles().size() > 0)        {            //取得第一个样式的id            buyitem += product.getStyles().iterator().next().getId();        }        return buyitem.hashCode();    }    @Override    public boolean equals(Object obj) {        if (this == obj)            return true;        if (obj == null)            return false;        if (getClass() != obj.getClass())            return false;        BuyItem other = (BuyItem) obj;        if (product == null) {            if (other.product != null)                return false;        } else if (!product.equals(other.product))            return false;        if(product.getStyles().size() != other.getProduct().getStyles().size())        {            return false;        }        if(product.getStyles().size() > 0)        {            ProductStyle style = product.getStyles().iterator().next();            ProductStyle otherstyle = other.product.getStyles().iterator().next();            if(!style.equals(otherstyle))                return false;        }        return true;    }}

BuyCart.java

我们购买商品需要实现购物车,购物车里面装的是我们的商品,并且我们的购物车需要有一些功能
1) 添加购物项
2) 清除所有购物项
3) 删除购物项
4) 更新购买的商品数量
5) 批量修改购买的商品数量
6) 获取商品应该付的金额
7) 获取商品的市场总价
8) 在本店购买节省的金额

/** * 功能:这个是一个购物车实体 * 时间:2015年6月6日08:48:09 * 文件:BuyCart.java * 作者:cutter_point */package com.cutter_point.bean;import java.util.ArrayList;import java.util.List;public class BuyCart {    private List<BuyItem> items = new ArrayList<BuyItem>();    /**     * 添加购物项     * @param item     */    public void addItem(BuyItem item)    {        if(!items.contains(item)) //比较是否存在里面必须重载两个方法equals和hashCode        {            items.add(item); //如果不存在的话就添加一个        }        else    //如果已经存在这个购物项,那么就添加一个购买数量        {            for(BuyItem bi : items)            {                if(bi.equals(item))                {                    bi.setAmount(bi.getAmount() + 1);                    break;                }            }        }    }    /**     * 清除所有购物项     */    public void removeAll()    {        items.clear();    }    /**     * 删除购物项     * @param item     */    public void removeBuyItem(BuyItem item)    {        if(items.contains(item))            items.remove(item);    }    /**     * 更新购物车里面商品项的购买数量     * @param item     */    public void updateAmount(BuyItem item)    {        for(BuyItem bi : items)        {            if(bi.equals(item))            {                //修改数量                bi.setAmount(item.getAmount());                break;            }        }    }    /**     * 批量修改更新购物车的购买数量     * @param items     */    public void updateAmount(BuyItem[] items)    {        for(BuyItem bi : this.items)        {            for(BuyItem item : items)            {                if(item.equals(item))                {                    //修改数量                    bi.setAmount(item.getAmount());                    break;                }            }        }    }    /**     * 获取应付总金额     * @return     */    public Float getTotalPrice()    {        float allprice = 0f;        for(BuyItem item : items)        {            //获取总金额            allprice += item.getProduct().getSellprice() * item.getAmount();        }        return allprice;    }    /**     * 获取市场总价     * @return     */    public Float getTotalMarketPrice()    {        float allprice = 0f;        for(BuyItem item : items)        {            //获取总金额            allprice += item.getProduct().getMarketprice() * item.getAmount();        }        return allprice;    }    /**     * 总节省金额     * @return     */    public float getTotalSavePrice()    {        return this.getTotalMarketPrice() - this.getTotalPrice();    }    public List<BuyItem> getItems() {        return items;    }    public void setItems(List<BuyItem> items) {        this.items = items;    }}

Cart.jsp

我们购买了相应的商品之后,我们会有相应的购物车栏目,在购物车里面的商品,我们可以显示出来

<%@ page language="java" isELIgnored="false" import="java.util.*" pageEncoding="utf-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><%@ taglib uri="/struts-tags" prefix="s" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><HEAD><TITLE>购物车 巴巴运动网</TITLE><META http-equiv="Content-Type" content="text/html; charset=UTF-8" /><META http-equiv="Content-Language" content="zh-CN" /><LINK href="css/new_cart.css" rel="stylesheet" type="text/css" /><link href="css/global/header01.css" rel="stylesheet" type="text/css" /><SCRIPT type="text/javascript" src="js/FoshanRen.js"></SCRIPT><SCRIPT type="text/javascript"><!--/** 获取以指定字符串为前缀的输入字段集合 **//** 数字输入格式是否正确(长度1-4位,第一个数字必须是1-9) **/function numericFormat(strNumber){     var newPar=/^[1-9]\d{0,3}$/;  return newPar.test(strNumber);} function getInputsByname(name, etype){//    var inputs = document.getElementsByTagName("input");    var texts = new Array();    var y = 0;    for (var i = 0; i < inputs.length; i++) {      if (inputs[i].type == etype && inputs[i].name!=null && inputs[i].name.substring(0, name.length) == name) {            texts[y] = inputs[i];            y++;        }    }    return texts;}function settleAccounts(){    if(validateAmount()){               var form = document.forms["buycart"];        form.method.value="settleAccounts";        form.submit();    }}function modifyAmount(){    if(validateAmount())    {               var form = document.getElementById("buycart");        form.action = "<s:url action='cart-updateAmount' />";        form.submit();    }}/** 验证购买数量字段 **/function validateAmount(){    var amounts = getInputsByname("amount_", "text");    if(amounts.length==0){        alert("您还没有购买商品");        return false;    }else{        for (var i = 0; i < amounts.length; i++) {            var amount = amounts[i];            if(amount.value==null || amount.value.trim()==""){                alert("\n您购买的商品中,有的商品购买数量为空,请填写购买数量");                amount.focus();                return false;            }else if(amount.value=="0"){                alert("\n您购买的商品中,有的商品购买数量为0,如果您不需要该商品,可以删除它");                amount.select();                return false;            }else if(!numericFormat(amount.value)){                alert("\n购买数量含有非数字数据,请更正");                amount.select();                return false;            }        }    }    return true;}//--></SCRIPT></HEAD><BODY><jsp:include page="/page/share/Head.jsp"/><BR><TABLE cellSpacing=0 cellPadding=5 width="98%" border="0" align="center">  <TR>    <TD><TABLE cellSpacing=0 cellPadding=0 width="96%" border=0>      <TBODY>        <TR>          <TD width="24%"><IMG height=31 src="images/buy/shop-cart-header-blue.gif" width="218" border=0 /></TD>          <TD width="34%">如果您修改了商品数量,请点击              <img style="CURSOR: hand; " alt="修改数量" src="images/buy/update-t-sm.gif" value="修改数量" border="0" onClick="javascript:modifyAmount()" /></TD>          <TD width="14%" align="left">              <a href="<s:url action="cart-deleteAll" />">                <img style="CURSOR:hand;" alt="清空购物车" src="images/buy/az-empty-shoppingcard.gif" border="0" />              </a>          </TD>          <TD width="15%" align=left><a href="/"><img src="images/buy/as-s-continus.gif" width="116" height="22" border="0" /></a></TD>          <TD width="13%" align=right><img style="CURSOR:hand;" src="images/buy/az-by-split.gif" width="116" height="22" onClick="javascript:settleAccounts()" /></TD>        </TR>      </TBODY>    </TABLE></TD>  </TR>  <TR>    <TD>     <FORM id="buycart" name="buycart" action="##" method="post">    <TABLE cellSpacing=0 cellPadding=6 width="100%" border=0>       <TR bgColor=#d7ebff>        <TD width="457"><STRONG>我的购物车里的商品--马上购买</STRONG></TD>        <TD width=112><DIV align=center><STRONG>市场价</STRONG></DIV></TD>        <TD width=181><DIV align=center><STRONG>价格</STRONG></DIV></TD>        <TD width=73><DIV align=center><STRONG>数量</STRONG></DIV></TD>        <TD width=66>&nbsp;</TD>      </TR><!-- loop begin --><s:iterator value="#request.buyCart.items" var="item">    <TR vAlign="top">         <TD>             <STRONG>                <A href="" target="_blank"><s:property value="#item.product.name" /></A>            </STRONG>             <span class="h3color">                [颜色/样式:                <s:iterator value="#item.product.styles" var="style">                    <s:property value="#style.name" />                </s:iterator>                ]            </span>            <BR /><BR />        </TD>        <TD width="112" align="center">            <SPAN class="price" title="¥<s:property value="#item.product.marketprice" />元">                <FONT color="black">                    <S>                        <B><s:property value="#item.product.marketprice" /></B>                    </S>                </FONT>            </SPAN>        </TD>        <TD width="181">            <P align="center">                <SPAN class="price">                    <B><s:property value="#item.product.sellprice" /></B>                </SPAN>             <BR />                为您节省:                <SPAN class="price"><s:property value="#item.product.savedPrice" /></SPAN>            <BR />             </P>            </TD>        <TD align="middle" width="73">            <input type="text" style="WIDTH: 30px" maxLength="3"                 value="<s:property value="#item.amount" />"                  name="amount_<s:property value="#item.product.id" />-<s:iterator value="#item.product.styles" var="style"><s:property value="#style.id" /></s:iterator>"                     onkeypress="javascript:InputIntNumberCheck()" />        </TD>         <TD align="middle" width="66">            <a href="<s:url action="cart-delete" />?buyitemid=<s:property value="#item.product.id" />-<s:iterator value="#item.product.styles" var="style"><s:property value="#style.id" /></s:iterator>">                <img height="17" src="images/buy/delete.gif" width="45" border="0" />            </a>        </TD>    </TR>    <TR vAlign="top">        <TD colSpan="5">            <IMG height=1 src="images/buy/green-pixel.gif" width="100%" border="0" />        </TD>    </TR></s:iterator><!-- loop end -->         </TABLE></FORM>      <table width="96%" border="0" align="left">        <tr>          <td width="60%" align="right">如果您修改了商品数量,请点击            <img style="CURSOR:hand;" alt="修改数量" src="images/buy/update-t-sm.gif" value="修改数量" border="0" onClick="javascript:modifyAmount()" />          </td>          <td width="9%" align="right">            <DIV align="right">                <SPAN class="price">                    <STRONG>                        <B><FONT color="black">共计:</FONT></B>                    </STRONG>                </SPAN>            </DIV>          </td>          <td width="11%" align="right">            <DIV align="center">                <SPAN class="price">                    <STRONG>                        <B class="price">                             <FONT color="black"><s:property value="#request.buyCart.getTotalPrice()" /></FONT>                        </B>                    </STRONG>                </SPAN>            </DIV>          </td>          <td width="8%" align="right"><DIV align="right"><SPAN class="price"><STRONG><B><FONT color="black">节省:</FONT></B></STRONG></SPAN></DIV></td>          <td width="12%" align="right"><DIV align="center"><SPAN class="price"><STRONG><B class="price"><s:property value="#request.buyCart.getTotalSavePrice()" /></B></STRONG></SPAN></DIV></td>        </tr>        <tr>          <td colspan="3" align="right">&nbsp;</td>          <td colspan="2" align="right">            <img style="CURSOR:hand;" src="images/buy/az-by-split.gif" width="116" height="22" onClick="javascript:settleAccounts()" />          </td>        </tr>      </table></TD>  </TR></TABLE><br><jsp:include page="/page/share/Foot.jsp" /></BODY></HTML>

这里写图片描述

CartAction.java

我们对购物车进行相应的操作的时候,我们可以写一个控制器,用来处理相应的需求,实现购物车的各种功能

/** * 功能:这个是实现购物车的管理action控制器 * 时间:2015年6月6日12:24:40 * 文件:CartAction.java * 作者:cutter_point */package com.cutter_point.web.action.shopping;import javax.servlet.http.HttpServletRequest;import org.apache.struts2.interceptor.ServletRequestAware;import org.springframework.context.annotation.Scope;import org.springframework.stereotype.Controller;import com.cutter_point.bean.BuyCart;import com.cutter_point.bean.BuyItem;import com.cutter_point.bean.product.ProductInfo;import com.cutter_point.bean.product.ProductStyle;import com.cutter_point.web.formbean.cart.CartForm;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;@Controller@Scope("prototype")public class CartManageAction extends ActionSupport implements  ServletRequestAware, ModelDriven<CartForm>{    private static final long serialVersionUID = 3076346960806313949L;    private HttpServletRequest request;    private CartForm formbean;    private BuyCart getBuyCart(HttpServletRequest req)    {        return (BuyCart) req.getSession().getAttribute("buycart");    }    /**     * 删除指定的购买项目     * @return     */    public String delete()    {        //首先判断取得的购物车不是空的        BuyCart buyCart = this.getBuyCart(request);        if(buyCart != null)        {            //删除对应的产品            ProductInfo product = new ProductInfo(formbean.getProductid());            product.addProductStyle(new ProductStyle(formbean.getStyleid()));            buyCart.removeBuyItem(new BuyItem(product)); //移除对应的这个购物项        }        return "cart";    }    /**     * 删除所有的购物项     * @return     */    public String deleteAll()    {        //首先判断取得的购物车不是空的        BuyCart buyCart = this.getBuyCart(request);        if(buyCart != null)        {            //删除对应的产品            buyCart.removeAll();; //移除对应的这个购物项        }        return "cart";    }    /**     * 更新所有的购买数量     * @return     */    public String updateAmount()    {        //首先取得当前回话的相应的购物车        BuyCart buyCart = this.getBuyCart(request);        //如果购物车不为空        if(buyCart != null)        {            //循环,取得所有的购物项            for(BuyItem item : buyCart.getItems())            {                StringBuilder key = new StringBuilder("amount_");                //根据对应的字符串,取得对应的修改数量                key.append(item.getProduct().getId()).append("-");                //然后在加上相应的类型id                if(item.getProduct().getStyles().size() > 0)                {                    //如果这个商品里面有相应的类型号的话                    key.append(item.getProduct().getStyles().iterator().next().getId());                }                //根据这个key在页面取得相应的数量                String amountStr = request.getParameter(key.toString());                if(amountStr != null && !"".equals(amountStr))                {                    try                     {                        //如果不为空,且不是空字符传,转换为整形                        int amount = Integer.parseInt(amountStr);                        if(amount > 0)                        {                            //小于0不做处理                            item.setAmount(amount); //设置这个数量为新的数量                        }                    }                     catch (NumberFormatException e)                     {                        e.printStackTrace();                    }                }            }        }        return "cart";    }    @Override    public void setServletRequest(HttpServletRequest arg0)     {        this.request = arg0;    }    @Override    public CartForm getModel()     {        //从页面获取表单值        if(formbean == null)            formbean = new CartForm();        return formbean;    }}

SiteSession.java

实现对session的监听,实现对购物车的存放,我们的购物车不放到数据库中,只是放到session中,根据浏览器可能会关闭,那么我们就可以吧购物车存放的时候给个ID号,那么我们就可以在取出来的时候根据ID号来取

/** * 功能:这个是为了实现对session的监听 * 时间:2015年6月5日20:43:35 * 文件:SiteSession.java * 作者:cutter_point */package com.cutter_point.web.action.shopping;import java.util.HashMap;import java.util.Map;import javax.servlet.http.HttpSession;import javax.servlet.http.HttpSessionEvent;import javax.servlet.http.HttpSessionListener;public class SiteSession implements HttpSessionListener{    //这个用来存放session    private static Map<String, HttpSession> sessions = new HashMap<String, HttpSession>();    @Override    public void sessionCreated(HttpSessionEvent arg0)     {        //根据id号来存放session        sessions.put(arg0.getSession().getId(), arg0.getSession());    }    @Override    public void sessionDestroyed(HttpSessionEvent arg0)     {        //session有超时时间限制的,时间到了我们就remove掉        sessions.remove(arg0.getSession().getId());    }    /**     * 根据session的id号取得相应的session     * @param sessionID     * @return     */    public static HttpSession getSession(String sessionID)    {        return sessions.get(sessionID);    }    /**     * 这里是吧这个session在里面的引用删除掉     * @param sessionID     */    public static void removeSession(String sessionID)    {        if(sessions.containsKey(sessionID))        {            //如果存在的话就删除掉            sessions.remove(sessionID);        }    }}

总结

我们处理购物车的时候,我们可以放到session中还可以放到cookie中,并且我们给我们一个用户使用购物车的时候给这个购物车一个id号,下一次取得时候我们还可以吧session原来的那个取出来,给当前的购物车存放相应的数据

0 0
原创粉丝点击