修改购物项图书数量的Ajax处理

一、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">
<base href="http://${pageContext.request.serverName }:${pageContext.request.serverPort }${pageContext.request.contextPath }/" />
<title>Insert title here</title>
<script type="text/javascript" src="script/jquery-1.7.2.js"></script>
<script type="text/javascript">
	$(function(){
		//★给所有删除链接添加点击事件
		$(".delete").click(function(){
			if(!window.confirm("你确定要删除该购物项吗?")){
				return false; //不让链接提交
			}
		});

		//给所有显示书的数量的输入框添加失去焦点的事件
		$(".count").blur(function(){
			var count =this.value;//得到输入框中的数值
			if(isNaN(count)){
				count=1;
			}

			count=count*1;//→转为number类型
			if(count<=0){
				count=1;
			}

			var bookId=this.id;//this代表了当前的输入框中的内容

			//在这里需要在其变化之前保存下来以便于在function中使用
			var inputEle=this; //它是一个dom对象
			//window.location.href = "${pageContext.request.contextPath}/client/CartServlet?method=update&count="+count+"&bookId="+bookId;

			//★修改购物项图书数量的Ajax处理★ 这个时候需要发送Ajax请求
			var path="client/CartServlet"; //上面加了base标签
			var params={method:"update",count:count,bookId:bookId};
			//data的数据类型{count:2,itemPrice:20,totalCount:5,totalPrice:50}
			var success=function(data){//→需要更新四处
				//得到总数量
				$("#totalCount").html(data.totalCount);
				//得到总价
				$("#totalPrice").html(data.totalPrice);
				//更新购物项中的图书数量
				inputEle.value=data.count;//将数据放进去
				//得到小计
				$(inputEle).parent().parent().find(".itemPrice").html(data.itemPrice);
			}

			$.post(path,params,success,"json");

		});

		//给<button>+</button>添加点击事件

	 	$(".increase").click(function(){
			//得到 数量首先,先找button的父元素,再找子元素
			var $countEle=$(this).parent().find("input");

			var count=$countEle.val();//得到文本框中的值
			    count=count*1+1;//转为number类型后再做运算\
			//获取书的id
			var bookId=$countEle.attr("id");
		   //现在改为发送Ajax请求

			var path="client/CartServlet";
			var params={method:"update",count:count,bookId:bookId};
			var success=function(data){
				$("#totalCount").html(data.totalCount);
				$("#totalPrice").html(data.totalPrice);
				//更新书的数量
				$countEle.val(data.count);
				//得到小计
				$countEle.parents("tr").find(".itemPrice").html(data.itemPrice);

			};

			$.post(path,params,success,"json");

		}); 

		//给<button>-</button>添加点击事件
		$(".decrease").click(function(){
			//得到数量
			var $countEle = $(this).parent().find("input");
			var count = $countEle.val();//链式调用
			count = count*1-1;

			if(count<=1){
				count=1;
			} 

			//书的id
			var bookId = $countEle.attr("id");
			//请求
			//window.location.href = "${pageContext.request.contextPath}/client/CartServlet?method=update&count="+count+"&bookId="+bookId;
			//改为Ajax请求。。。。
			var path="client/CartServlet";
			var params={method:"update",count:count,bookId:bookId};
			var success=function(data){
				$("#totalCount").html(data.totalCount);
				$("#totalPrice").html(data.totalPrice);
				//更新书的数量
				$countEle.val(data.count);
				//找当前行的小计
				$countEle.parents("tr").find(".itemPrice").html(data.itemPrice);

			};

			$.post(path,params,success,"json");
		});
	});

</script>

</head>
<body>
	<center>
		<h2>我的购物车</h2>
			<c:choose>
				<c:when test="${empty CART || empty CART.map }">
					购物车里面还没有书,立即去<a href="client/BookClientServlet?method=getPageInCondition">购物</a>
				</c:when>

				<c:otherwise>
					<table border="1" cellpadding="10" cellspacing="0">
						<tr>
							<td>书名</td>
							<td>单价</td>
							<td>数量</td>
							<td>小计</td>
							<td>操作</td>
						</tr>

						<c:forEach items="${CART.map }" var="entry">
							<tr>
								<td>${entry.value.book.bookName}</td>
								<td>${entry.value.book.price}</td>
								<td>
									<button class="decrease" <%-- ${entry.value.count<=1 ? 'disabled="false"' : ''} --%>>-</button>
									<input id="${entry.key}" class="count" type="text" value="${entry.value.count}" style="width: 30px;"/>
									<button class="increase">+</button>
								</td>
								<td ><span class="itemPrice">${entry.value.itemPrice}</span></td>
								<td><a class="delete" href="client/CartServlet?method=delete&bookid=${entry.key}">删除</a></td>
							</tr>						

						</c:forEach>

						<tr>
							<td><a id="clear" href="client/CartServlet?method=clear" >清空购物车</a></td>
							<td><a
								href="client/BookClientServlet?method=getPageInCondition">继续购物</a></td>
							<td>共<span id="totalCount">${CART.totalCount }</span>本书</td>
							<td>总价:<span id="totalPrice">${CART.totalPrice }</span>元</td>
							<td><a href="client/OrderServlet?method=listAllAddress">去结算</a></td>
						</tr>
					</table>
				</c:otherwise>

			</c:choose>
	</center>

</body>
</html>

二、修改CartServlet

package com.atguigu.bookstore.servlet.client;

import com.atguigu.bookstore.bean.Book;
import com.atguigu.bookstore.fun.Cart;
import com.atguigu.bookstore.service.impl.BookServiceImpl;
import com.atguigu.bookstore.service.impl.CartServiceImpl;
import com.atguigu.bookstore.service.inter.BookService;
import com.atguigu.bookstore.service.inter.CartService;
import com.atguigu.bookstore.servlet.BaseServlet;
import com.atguigu.bookstore.utils.WebUtils;
import com.google.gson.Gson;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class CartServlet extends BaseServlet {
	private static final long serialVersionUID = 1L;
	CartService cartService=new CartServiceImpl();
	BookService bookService=new BookServiceImpl();

	protected void add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("add....");
		String bookid = request.getParameter("bookid");
		Book book = bookService.getBookById(bookid);
		Cart cart = WebUtils.getCart(request);
		cartService.add(book, cart);

		//要得到这样的数据{"bookName":"java", "totalCount": 2}	怎么得?
		String bookName = book.getBookName();
		int totalCount = cart.getTotalCount();

		//使用Gson可以得到以上类型的数据,但是需要一个源,这个只有map和
		//src是一个一般对象或map对象,在这里只能用map对象,因为如果是一般对象,所需要一个类中包含不了这2种属性,还得重新定义类,挺麻烦的
		//而src是map对象时就不需要在重新定义类了,

		Map<String, Object>map=new HashMap<String, Object>();
		map.put("bookName", bookName); //取数据的时候是data.bookName;
		map.put("totalCount", totalCount);	

		String jsonStr=new Gson().toJson(map);

		response.setContentType("text/json;charset=utf-8");
		response.getWriter().write(jsonStr);

	}

	protected void delete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("delete...");
		String bookid = request.getParameter("bookid");
		Cart cart = WebUtils.getCart(request);
		cartService.deleteItem(Integer.parseInt(bookid), cart);
		WebUtils.myForward(request, response, "/client/book/cart.jsp");

	}
	protected void update(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("update....");
		String count = request.getParameter("count");
		String bookId = request.getParameter("bookId");

		Map<String, Object>map=cartService.updateCount(Integer.parseInt(bookId),
				Integer.parseInt(count), WebUtils.getCart(request));

//		WebUtils.myForward(request, response, "/client/book/cart.jsp"); //不用这种方式了

	//要返回的数据类型:{count:2,itemPrice:20,totalCount:5,totalPrice:50},那么如何得到呢?可以更改updateCount方法,使其返回一个map集合

		String json = new Gson().toJson(map);
		response.setContentType("text/json;charset=utf-8");
		response.getWriter().write(json);

	}

	protected void clear(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("clear....");
		cartService.clear(WebUtils.getCart(request));
		WebUtils.myForward(request, response, "/client/book/cart.jsp");

	}

}

三、修改CartServiceImpl

<span style="white-space:pre">	</span>@Override
	public Map<String, Object> updateCount(int BookId, int count, Cart cart) {
		Map<String, Object>map=new HashMap<String, Object>();
		CartItem cartItem = cart.getMap().get(BookId);
		cartItem.setCount(count);
		//{count:2,itemPrice:20,totalCount:5,totalPrice:50},
		map.put("count", count);
		map.put("itemPrice", cartItem.getItemPrice());
		map.put("totalCount", cart.getTotalCount());
		map.put("totalPrice", cart.getTotalPrice());

		return map;
	}
时间: 2024-10-21 14:16:37

修改购物项图书数量的Ajax处理的相关文章

改动购物项图书数量的Ajax处理

一.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 &qu

JSP---网上商城-&gt;修改购物车购物项的数量

Buy.jsp //修改购物车商品的数量 if (action != null && action.equals("update")) { Iterator<CartItem> it = c.getItems().iterator(); while (it.hasNext()) { CartItem item = it.next(); int count = Integer.parseInt(request.getParameter("p"

双系统修改启动项顺序&amp;&amp;&amp;修改开机启动等待时间

1. 双系统修改启动项顺序 更改/etc/grub.d目录 下的文件名是可行的 默认情况下Windows 7对应的文件名是30_os-prober,第一个linux系统对应的是10-linux,00是header,05是debian-theme,可见10是第一个启动项,只需要更改Windows 7的文件名(06-09均可)即可改变启动顺序,经我测试,成功地修改了启动顺序. 具体做法: sudo mv /etc/grub.d/30_os-prober /etc/grub.d/08_os-probe

linux和window双系统下修改系统启动项

参考:http://jingyan.baidu.com/article/63acb44ae4062c61fcc17e27.html: 我们在安装双系统之后经常会遇到想打开windows但默认启动项是ubuntn的问题. windows系统下进行修改: EasyBCD,可以修改启动项的名字,顺序等,也可以添加启动项 ubuntn系统下进行修改: 1.首先开机或者重启,在启动项选择菜单处记住win7对应的序号,从上至下的序号从0开始计数,我的win7系统选项处于第5个,那么序号就应该是4,记住后,打

win7,Ubuntu 12.04 双系统修改启动项顺序三方法

修改启动项顺序的三种方法 本文所涉及的方法都是在Ubuntu的安装时将引导加载程序grub安装在了整个硬盘(即MBR内),即开机以grub引导. 方法1在Ubuntu终端下输入:sudo mv /etc/grub.d/30_os-prober /etc/grub.d/08_os-probersudo update-grubsudo是使用root权限,mv是修改该文件名.该 命令是将etc文件夹下的grub.d文件夹下的30_os-prober文件改名为08_os-prober.(08可以改为06

ECShop后台修改站内快讯数量及首页精品推荐等显示个数设置

这节说下ECShop两个简单的设置,第一个是首页站内快讯显示数量的修改 这个可以从后台--系统设置--商店设置--显示设置,找到"最新文章显示数量",然后修改此项的参数,就可以修改首页站内快讯的显示数量. 第二个数关于首页的精品推荐,新品上市,热卖商品 这三项的显示商品个数的设置 这个从后台--模板管理--设置模板: 找到 "精品推荐.新品上架.热卖商品"这三个,修改对应的参数即可. 今天说的这两个还是比较简单的,高手可以直接绕道. 这一节就先到这里吧.

Python项目之我的第一个爬虫----爬取豆瓣图书网,统计图书数量

今天,花了一个晚上的时间边学边做,搞出了我的第一个爬虫.学习Python有两个月了,期间断断续续,但是始终放弃,今天搞了一个小项目,有种丰收的喜悦.废话不说了,直接附上我的全部代码. 1 # -*- coding:utf-8 -*- 2 __author__ = 'Young' 3 4 import re,urllib #urllib : 网页访问,返回网页的数据.内容 5 def my_get(ID):# 封装成函数方便调用 6 html = urllib.urlopen("https://r

【转】Win7与Ubuntu 14.04双系统修改启动项顺序

原文网址:http://blog.sina.com.cn/s/blog_b381a98e0102v1gy.html 一.Ubuntu14.04采用默认安装方式的情况 采用默认安装方式,在win7下安装了Ubuntu 14.04后,在grub中,win7启动想是最后一个,为了把win7设置为默认启动项,需要更改grub设置.google了半天,发现更改/etc /default/grub是无效的,打开/boot/grub/grub.cfg,里面写着“DO NOT EDIT THIS FILE”,而

CentOS 7下修改rabbitmq打开文件数量方法

以下为使用systemd的修改方法: 1.系统层修改: 通过修改sysctl配置,提高系统的打开文件数量 vim /etc/sysctl.conf,添加: fs.file-max = 65535 执行sysctl -p 此步骤调整后,打开rabbitmq管理页面,会发现rabbitmq最大的打开文件数量并未调整,需要进行下面步骤 2.修改rabbitmq配置 修改/etc/systemd/system/multi-user.target.wants/rabbitmq-server.service