【j2ee spring】46、巴巴运动网——购物车
2015-07-21 14:13
645 查看
巴巴运动网——购物车
1、项目目录结构
2、项目代码
BuyItem.java
一个购物车里面需要的一些属性,我们构建一个购物车bean,购物车里面每一件商品都有
1) 购买的商品
2) 购买的数量
BuyCart.java
我们购买商品需要实现购物车,购物车里面装的是我们的商品,并且我们的购物车需要有一些功能
1) 添加购物项
2) 清除所有购物项
3) 删除购物项
4) 更新购买的商品数量
5) 批量修改购买的商品数量
6) 获取商品应该付的金额
7) 获取商品的市场总价
8) 在本店购买节省的金额
Cart.jsp
我们购买了相应的商品之后,我们会有相应的购物车栏目,在购物车里面的商品,我们可以显示出来
CartAction.java
我们对购物车进行相应的操作的时候,我们可以写一个控制器,用来处理相应的需求,实现购物车的各种功能
SiteSession.java
实现对session的监听,实现对购物车的存放,我们的购物车不放到数据库中,只是放到session中,根据浏览器可能会关闭,那么我们就可以吧购物车存放的时候给个ID号,那么我们就可以在取出来的时候根据ID号来取
总结
我们处理购物车的时候,我们可以放到session中还可以放到cookie中,并且我们给我们一个用户使用购物车的时候给这个购物车一个id号,下一次取得时候我们还可以吧session原来的那个取出来,给当前的购物车存放相应的数据
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> </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"> </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原来的那个取出来,给当前的购物车存放相应的数据
相关文章推荐
- LeetCode java实现Add Two Numbers
- Java Timer的使用(timer.schedule定时执行)
- 对JAVA的一些个人总结——面向对象
- java错误篇一
- 朴素贝叶斯分类算法-----java
- springmvc笔记
- Spring Resource
- Spring 事务管理原理探究
- spring配置和dubbo
- Java基础总结(二)
- java对象转为json数据在前台展示
- java数据类型讲解
- java 解析json格式数据
- JAVA 十六进制与字符串的转换
- java中JFrame类中函数addWindowListener(new WindowAdapter)
- MyEclipse注释模板设置
- Java JDK1.5 Condition方法
- 从Eclipse到Android Studio:Android项目如何进行迁移
- Spring MVC的单元测试
- SlidingMenu (一)在Eclipse中如何引入SlidingMenu和其Demo