查看购物车(并实现其中的方法)

将购物车放入Session中

修改数量用Ajax  为-0时删除  

	// 修改数量
	protected void updateItemQuantity(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 4.在 方法中获取quantity id 在获取 购物车对象
		// 调用service方法 做修改
		String idStr = request.getParameter("id");
		String quantityStr = request.getParameter("quantity");
		ShoppingCart sc = BookStoreWebUtils.getShoppingCart(request);

		int id = -1;
		int quantity = -1;
		try {
			id = Integer.parseInt(idStr);
			quantity = Integer.parseInt(quantityStr);
		} catch (Exception e) {
		}
		if (id > 0 && quantity > 0) {
			bookService.updateItemQuantoity(sc, id, quantity);
		}
		// 5.传回 JSON数据
		Map<String, Object> result = new HashMap<>();
		result.put("bookNumber", sc.getBookNumber());
		result.put("totalMoney", sc.getTotalMoney());

		Gson gson = new Gson();
		String jsonStr = gson.toJson(result);
		response.setContentType("text/javascript");
		response.getWriter().print(jsonStr);

	}

	// 控制器 不写逻辑
	protected void clear(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		ShoppingCart sc = BookStoreWebUtils.getShoppingCart(request);
		bookService.clearShoppingCart(sc);

		request.getRequestDispatcher("/WEB-INF/pages/emptycart.jsp").forward(request, response);
	}

	// 删除
	protected void remove(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String idStr = request.getParameter("id");
		int id = -1;
		try {
			id = Integer.parseInt(idStr);
		} catch (Exception e) {
		}
		ShoppingCart sc = BookStoreWebUtils.getShoppingCart(request);
		bookService.removeItemFromShoppingCart(sc, id);
		// 如果删 了 购物车 转发到 为空的那个 页面
		if (sc.isEmpty()) {
			request.getRequestDispatcher("/WEB-INF/pages/emptycart.jsp").forward(request, response);
			return;
		}
		// 否则 不变
		request.getRequestDispatcher("/WEB-INF/pages/cart.jsp").forward(request, response);

	}

	// 仅仅是关于转发 的 方法 可以写的灵活
	public void forwardPage(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String page = request.getParameter("page");
		request.getRequestDispatcher("/WEB-INF/pages/" + page + ".jsp").forward(request, response);
	}

	// 加入购物车
	public void addToCart(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 1.获取商品的id
		String idStr = request.getParameter("id");
		int id = -1;
		boolean flag = false;
		try {
			id = Integer.parseInt(idStr);
		} catch (Exception e) {
		}
		if (id > 0) {// 合法
			// 2、 获取购物车对象
			ShoppingCart sc = BookStoreWebUtils.getShoppingCart(request);
			// 3、调用 BookServlet的addToCart()方法把商品放到购物车中
			flag = bookService.addToCart(id, sc);
		}
		if (flag) {
			// 4、直接调用getBOOKS方法
			getBooks(request, response);
			return;
		}
		response.sendRedirect(request.getContextPath() + "/error.jsp");
	}

	// 获取图书详细信息
	public void getBook(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String idStr = request.getParameter("id");
		int id = -1;
		Book book = null;
		try {
			id = Integer.parseInt(idStr);
		} catch (NumberFormatException e) {
		}
		if (id > 0) {
			book = bookService.getBook(id);
		}
		if (book == null) {
			response.sendRedirect(request.getContextPath() + "error.jsp");
			return;
		}
		request.setAttribute("book", book);
		request.getRequestDispatcher("/WEB-INF/pages/book.jsp").forward(request, response);
	}
package com.greatest.mvcapp.service;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;

import com.greatest.mvcapp.dao.AccountDAO;
import com.greatest.mvcapp.dao.BookDAO;
import com.greatest.mvcapp.dao.TradeDAO;
import com.greatest.mvcapp.dao.TradeItemDAO;
import com.greatest.mvcapp.dao.UserDAO;
import com.greatest.mvcapp.dao.impl.AccountDAOIml;
import com.greatest.mvcapp.dao.impl.BookDAOImpl;
import com.greatest.mvcapp.dao.impl.TradeDAOImpl;
import com.greatest.mvcapp.dao.impl.TradeItemDAOImpl;
import com.greatest.mvcapp.dao.impl.UserDAOImpl;
import com.greatest.mvcapp.main.Book;
import com.greatest.mvcapp.main.ShoppingCart;
import com.greatest.mvcapp.main.ShoppingCartItem;
import com.greatest.mvcapp.main.Trade;
import com.greatest.mvcapp.main.TradeItem;
import com.greatest.mvcapp.web.CriteriaBook;
import com.greatest.mvcapp.web.Page;
public class BookService {
      private BookDAO  bookDAO=new BookDAOImpl();
      public Page<Book> getPage(CriteriaBook criteriabook){
    	  return bookDAO.getPage(criteriabook);
      }
      public  Book getBook(int id){
    	  return bookDAO.getBook(id);
      }
      public  boolean addToCart(int id,ShoppingCart sc){
    	Book book=bookDAO.getBook(id);//获取book
    	
    	if(book!=null){
    		sc.addBook(book);
    		return true;
    	}
    	  return false;
      }
      public  void  removeItemFromShoppingCart(ShoppingCart sc,int id){
    	  sc.removeItem(id);
      }
      public  void  clearShoppingCart(ShoppingCart sc){
    	  sc.clear();
      }
      public  void  updateItemQuantoity(ShoppingCart sc ,int id,int quantity){
    	  sc.updateItemQuantity(id, quantity);
      }
      private AccountDAO  accountdao=new AccountDAOIml();
      private TradeDAO  tradedao=new TradeDAOImpl();
      private UserDAO  userdao=new UserDAOImpl();
      private TradeItemDAO  tradeitemdao=new TradeItemDAOImpl();
      
     //业务代码  实现 交易    将库存加减、交易记录、购买记录、账户余额 封装为事务  
	public void cash(ShoppingCart shoppingCart, String username, String accountid) {
	 //1、更新myboks表中的库存  salesamount和 storeunmber
       bookDAO.batchUpdateStoreNumberAndSalesAmount(shoppingCart.getItems());
      // int i=10/0;
       //2.更新account数据表的balance
       accountdao.updateBalance(Integer.parseInt(accountid), shoppingCart.getTotalMoney());
       
       //3.向trade数据表中插入一条记录   交易记录
       Trade trade=new Trade();
       //哪个用户在哪个时间购买书
       trade.setTradeTime(new Date(new java.util.Date().getTime()));
       trade.setUserId(userdao.getUser(username).getUserId());
       tradedao.insert(trade);
       
       //4.向tradeitem数据表中插入n条记录    购买记录 
         //4.1先获取信息  书的id  数量  
       Collection<TradeItem>  items=new ArrayList<>();
       for(ShoppingCartItem sci:shoppingCart.getItems()){
    	   TradeItem  tradeitem=new TradeItem();
    	   tradeitem.setBookId(sci.getBook().getId());
    	   tradeitem.setQuantity(sci.getQuantity());
    	   tradeitem.setTradeId(trade.getTradeId());
    	   items.add(tradeitem);
       }
       //4.2执行插入方法 
       tradeitemdao.batchSave(items);
       //5、清空购物车
       shoppingCart.clear();
		
	}
      
      
      
      
}

cart.jsp 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@taglib  uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="script/jquery-1.7.2.min.js"></script>
<%@include file="/commons/queryCondition.jsp" %>
<script type="text/javascript">
     $(function(){
    	 $(".delete").click(function(){
    		 var  $tr=$(this).parent().parent();
    		 var  title=$.trim($tr.find("td:first").text());
    		 var   flag = confirm("确定要删"+title+"除的信息吗?")
    		 if(flag){
    			 return true;
    		 }
    		 
    		 return false;
    	 })
    	 //Ajax修改单个商品的数量
    	 
    	 //1、获取页面中所有的Text ,并为其添加onchange响应函数
    	 //弹出对话框 :确定修改吗?
    	 $(":text").change(function(){
    		 var quantityVal=$.trim(this.value);
    		 var flag=false;
    		 
    		 var reg=/^\d+$/g;
    		 var quantity=-1;
    		 //校验数量的合法性 
    		 if(reg.test(quantityVal)){
    			 quantity=parseInt(quantityVal);//文本框中的值变为int 类型
    			 if(quantity>=0){
    				 flag=true;//合法 
    			 }
    		 }
    		 if(!flag){
    			 alert("输入的数量不合法!");
    		     $(this).val($(this).attr("class"));//回显  让当前的值为 class属性的值(class的值相当与隐藏域 )
    		     return;
    		 }
    		 var $tr=$(this).parent().parent();
             var title=$.trim($tr.find("td:first").text()); 
             if(quantity==0){
            	 var flag2=confirm("确定要删除"+title+"吗?");
            	 if(flag2){
            		 //得到了a节点
            		 var  $a=$tr.find("td:last").find("a");
            		 //执行a节点的onclick响应函数
            		 $a[0].onclick();//DOM对象
            		 return;
            	 }
            	 }
            	 var flag=confirm("确定要修改"+title+"的数量吗?")
            	 if(!flag){
            		 $(this).val($(this).attr("class"));
            		 return ;
             }
            		 
    	     //2、请求地址为BOOKServlet
             var  url="bookServlet";
    	     //3.请求参数为 method:updateItemQuantity,id:name属性值 ,quantity:val
    	     //time:new Date();
    	     var   idVal=$.trim(this.name);
    	     var args={"method":"updateItemQuantity","id":idVal,"quantity":quantityVal,"time":new Date()};
    	     //4.在updateItemQuantity方法中  获取quantity 在获取购物车的对象
    	     //调用service的方法做修改
    	     //5.回传 JSON数据 :bookNumber:xx,totalMoney;
    	     //6.更新当前页面 的bookNumber 和 totalMoney
    	     $.post(url,args,function(data){
    	    	 var  bookNumber=data.bookNumber;
    	    	 var  totalMoney=data.totalMoney;
    	    	 
    	    	 $("#totalMoney").text("总金额:¥"+totalMoney);
    	    	 $("#bookNumber").text("您的购物车中有 "+bookNumber+"本书");
    	    	 
    	     },"JSON");
    	 })
     })          
</script>
</head>
<body>
     <center>
        <br><br>
        <div id="bookNumber">你的购物车中共有${sessionScope.ShoppingCart.bookNumber }本书</div>
         <table  cellpadding="10">
            <tr>  
            <td>Title</td>
            <td>Quantity</td>
            <td>Price</td>
            <td> &nbsp;</td>
            </tr>
            <c:forEach items="${sessionScope.ShoppingCart.items }" var="item">
            <tr>
             <td>${item.book.title}</td>
             <td>
             <input class="${item.quantity }" type="text" size="1" name="${item.book.id }" value="${item.quantity }"/></td>
             <td>${item.book.price}</td>
             <td><a href="bookServlet?method=remove&pageNo=${param.pageNo }&id=${item.book.id}" class="delete" >删除</a>
             </td>
          </tr>
            </c:forEach>
          <tr><td clospan="4" id="totalMoney">总金额:¥
          ${sessionScope.ShoppingCart.totalMoney }
          </td> </tr>
          <tr>
             <td clospan="4">
             <a href="bookServlet?method=getBooks&pageNo=${param.pageNo }">继续购物</a>
             &nbsp;&nbsp;
             <a href="bookServlet?method=clear">清空购物车</a>     
             &nbsp;&nbsp;
             <a href="bookServlet?method=forwardPage&page=cash">结账</a>
             &nbsp;&nbsp;
             </td>
          </tr>
          
         </table>
     </center>
</body>
</html>

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值