【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> </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原来的那个取出来,给当前的购物车存放相应的数据
0 0
- 【j2ee spring】46、巴巴运动网——购物车
- 【j2ee spring】26、巴巴运动网-整合hibernate4(1)
- 【j2ee spring】27、巴巴运动网-整合hibernate4+spring4(2)
- 【j2ee spring】31、巴巴运动网整合S2SH
- 【j2ee spring】32、巴巴运动网的产品类别页面
- 【j2ee spring】33、巴巴运动网的产品类别展示
- 【j2ee spring】34、巴巴运动网的产品类别管理
- 【j2ee spring】36、巴巴运动网的产品品牌图片
- 【j2ee spring】39、巴巴运动网的产品信息
- 【j2ee spring】41、巴巴运动网的产品查询
- 【j2ee spring】42、巴巴运动网显示产品样式
- 【j2ee spring】44、巴巴运动网前台产品显示
- 【j2ee spring】45、巴巴运动网前台ajax应用
- 【j2ee spring】28、巴巴运动网-整合hibernate4+spring4(3)使用注解
- 【j2ee spring】29、巴巴运动网-整合hibernate4+spring4(4)DAO层
- 【j2ee spring】30、巴巴运动网-整合hibernate4+spring4(5)分页
- 【j2ee spring】35、巴巴运动网的产品类别管理(2)
- 【j2ee spring】37、巴巴运动网的产品品牌修改和查询
- PAT (Basic Level) Practise (中文)1005. 继续(3n+1)猜想 (25) C语言
- GCD深入理解(二)
- 查询Sybase ASE 对象如 tables, views, indexes, procedures, triggers, schemas, and users.
- 决策树算法---java
- 解决 eclipse 新建 maven 后无法显示 src/main/java 和 src/main/test
- 【j2ee spring】46、巴巴运动网——购物车
- 利用SQL索引提高查询速度
- Algorithms—172.Factorial Trailing Zeroes
- [高可用]Ubuntu搭建高可用的RabbitMQ(1)
- Java的内存机制
- block没那么难(一)
- PAT (Basic Level) Practise (中文)1006. 换个格式输出整数 (15) C语言
- 磁盘管理
- mysql 添加 删除字段