需要gson-2.2.4.jar

BookServlet.java

package com.aff.bookstore.servlet;

import java.io.IOException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import com.aff.bookstore.domain.Book;
import com.aff.bookstore.domain.ShoppingCart;
import com.aff.bookstore.service.BookService;
import com.aff.bookstore.web.BookStoreWebUtils;
import com.aff.bookstore.web.CriteriaBook;
import com.aff.bookstore.web.Page;
import com.google.gson.Gson; @WebServlet("/bookServlet")
public class BookServlet extends HttpServlet {
private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
} private BookService bookService = new BookService(); protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String methodName = request.getParameter("method");
try {
Method method = getClass().getDeclaredMethod(methodName, HttpServletRequest.class,
HttpServletResponse.class);
method.setAccessible(true);
method.invoke(this, request, response);
} catch (Exception e) {
e.printStackTrace();
}
} protected void updateItemQuantity(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 4.在updateItemQuantity 方法中,获取quantity,id,在获取购物车对象,调用service 的方法 做修改
String idStr = request.getParameter("id");
String quantityStr = request.getParameter("quantity");
ShoppingCart sc = BookStoreWebUtils.getShopingCart(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.updateItemQuantity(sc, id, quantity);
} // 5.传回JSON 数据:bookNumber:xx, totalMoney
Map<String, Integer> result = new HashMap<String, Integer>();
result.put("bookNumber", sc.getBookNumber());
result.put("totalMoney", (int) 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.getShopingCart(request);
bookService.clearShoppingCart(sc);
request.getRequestDispatcher("/WEB-INF/pages/empty.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.getShopingCart(request);
bookService.removeItemFromShoppingCart(sc, id);
if (sc.isEmpty()) {
request.getRequestDispatcher("/WEB-INF/pages/empty.jsp").forward(request, response);
} // 删除完再转发为回来
request.getRequestDispatcher("/WEB-INF/pages/cart.jsp").forward(request, response); } protected void toCartPage(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.getRequestDispatcher("/WEB-INF/pages/cart.jsp").forward(request, response);
} protected 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.getShopingCart(request); // 3.调用 BookService 的addToCart() 方法 把商品放到购物车中
flag = bookService.addToCart(id, sc);
} if (flag) {
// 4.直接调用 getBooks()方法
getBooks(request, response);
return;
}
response.sendRedirect(request.getContextPath() + "/errror-1.jsp");
} protected 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() + "/errror-1.jsp");
return;
}
}
request.setAttribute("book", book);
request.getRequestDispatcher("/WEB-INF/pages/book.jsp").forward(request, response);
} protected void getBooks(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String pageNoStr = request.getParameter("pageNo");
String minPriceStr = request.getParameter("minPrice");
String maxPriceStr = request.getParameter("maxPrice"); int pageNo = 1;
int minPrice = 0;
int maxPrice = Integer.MAX_VALUE;
try {
pageNo = Integer.parseInt(pageNoStr);
} catch (Exception e) {
}
try {
minPrice = Integer.parseInt(minPriceStr);
} catch (Exception e) {
}
try {
maxPrice = Integer.parseInt(maxPriceStr);
} catch (Exception e) {
}
CriteriaBook criteriaBook = new CriteriaBook(minPrice, maxPrice, pageNo);
Page<Book> page = bookService.getPage(criteriaBook); request.setAttribute("bookpage", page);
request.getRequestDispatcher("/WEB-INF/pages/books.jsp").forward(request, response); } }

cart.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!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.12.3.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);
if (quantity>=0) {
flag = true;
}
} if (!flag ) {
alert("输入数量不合法")
$(this).val($(this).attr("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超链接
//<td><a href="bookServlet?method=remove&pageNo=${param.pageNo }&id=${item.book.id}" class="delete">删除</a></td>
var $a = $tr.find("td:last").find("a"); //保证查询的条件不丢
//执行a 节点的 onclick 响应函数
/* var serializeVal = $(":hidden").serialize();
href = href+"&"+serializeVal;
window.location.href = href; */ $a[0].onclick();
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,id,再获取购物车对象,调用service 的方法 做修改
// 5.传回JSON 数据:bookNumber:xx, totalMoney // 6.更新当前页面的 bookNumber 和totalMoney
$.post(url,args,function(data){
var bookNumber = data.bookNumber;
var totalMoney = data.totalMoney /* alert(bookNumber);
alert(totalMoney); */ $("#bookNumber").text("您的购物差中共有"+ bookNumber+"本书");
$("#totalMoney").text("总金额:¥"+totalMoney);
},"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 colspan="4" id="totalMoney"> 总金额:¥${sessionScope.ShoppingCart.totalMoney}</td>
</tr> <tr>
<td colspan="4">
<a href="bookServlet?method=getBooks&pageNo=${param.pageNo }">继续购物</a>
&nbsp;&nbsp;
<a href="bookServlet?method=clear" >清空购物车</a>
&nbsp;&nbsp;
<a href="">结账</a>
&nbsp;&nbsp;
</td>
</tr> </table> </center>
<br><br> </body>
</html>

queryCondition.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<script type="text/javascript">
$(function(){
$("a").each(function(){
this.onclick = function(){
var serializeVal = $(":hidden").serialize();
var href = this.href+"&"+serializeVal;
window.location.href = href;
return false;
};
});
});
</script>

<input type="hidden" name="minPrice" value="${param.minPrice}"/>
<input type="hidden" name="maxPrice" value="${param.maxPrice}"/>

运行效果如下

(五)Ajax修改购物车单品数量的更多相关文章

  1. ajax修改表单的值后dom没更新的解决办法

    添加一个扩展方法,通过$("#id").html($("#id").formhtml())更改. 扩展方法: (function ($) { var oldHT ...

  2. 商城项目:商品列表ajax加载,ajax加入购物车--五张表的联合查询

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ProductLists.a ...

  3. ajax验证表单元素规范正确与否 ajax展示加载数据库数据 ajax三级联动

    一.ajax验证表单元素规范正确与否 以用ajax来验证用户名是否被占用为例 1创建表单元素<input type="text" id="t"> 2 ...

  4. ajax提交表单序列化(serialize())数据

    知识点: $("#form").serialize();将表单数据序列化为标准URL编码文本字符串(key1=value1&key2=value2…). 以下用一个例子来演 ...

  5. input file 在开发中遇到的问题 类似ajax form表单提交 input file中的文件

    最近在做项目的过程中遇到个问题,在这里做个记录防止日后忘记 现今的主流浏览器由于ajax提交form表单无法把文件类型数据提交到后台,供后台处理,可是开发中由于某些原因又不得不用ajax提交文件, 为 ...

  6. ajax form表单提交 input file中的文件

    ajax form表单提交 input file中的文件 现今的主流浏览器由于ajax提交form表单无法把文件类型数据提交到后台,供后台处理,可是开发中由于某些原因又不得不用ajax提交文件, 为了 ...

  7. TensorFlow从1到2(四)时尚单品识别和保存、恢复训练数据

    Fashion Mnist --- 一个图片识别的延伸案例 在TensorFlow官方新的教程中,第一个例子使用了由MNIST延伸而来的新程序. 这个程序使用一组时尚单品的图片对模型进行训练,比如T恤 ...

  8. jquery.form插件中动态修改表单数据

    jquery.form jquery.form插件(http://malsup.com/jquery/form/)是大家经常会用到的一个jQuery插件,它可以很方便将表单转换为ajax的方式进行提交 ...

  9. JavaScript实现ajax发送表单数据

    知识点: 1.重置表单数据 2.获取表单数据(纯JavaScript) 3.设置表单数据(纯JavaScript) 4.ajax发送数据到客户端 (1)设置请求头,自己组合数据 (2)实例化表单对象, ...

随机推荐

  1. Jmeter 性能测试(需求/指标分析与定义)

    1.一般而言,被测对象的性能需求,会在用户需求规格说明书中给出,如单位时间内的访问量需达到多少?业务响应时间不超过多少?业务成功率不低于多少?硬件资源耗用要在一个合理的范围中. 如下性能指标非常明确 ...

  2. Ant 环境安装

    1.下载安装 Ant,配置环境变量 进入 http://ant.apache.org/bindownload.cgi 下载 Ant 配置环境变量 新建 ANT_HOME 配置 Path 环境变量 配置 ...

  3. SaltStack漏洞导致的挖矿排查思路

    描述 SaltStack是一套C/S架构的运维工具,服务端口默认为4505/4506,两个端口如果对外网开放危害非常大,黑客利用SaltStack的远程命令执行漏洞CVE-2020-11651可以直接 ...

  4. 软件——IDEA主题美化

    前言 IntelliJ IDEA主要用于支持 Java.Scala.Groovy 等语言的开发工具,同时具备支持目前主流的技术和框架,擅长于企业应用.移动应用和 Web 应用的开发. IntelliJ ...

  5. SpringBoot:整合Druid、MyBatis

    目录 简介 JDBC 导入依赖 连接数据库 CRUD操作 自定义数据源 DruidDataSource Druid 简介 配置数据源 配置 Druid 数据源监控 配置 Druid web 监控 fi ...

  6. Java IO流(二)

    目录 字节缓冲流 概述 BufferedOutputStream类 继承父类的共性成员方法 构造方法 BufferedInputStream类 继承自父类的方法: 构造方法 文件复制练习(增强版 使用 ...

  7. spark是怎么从RDD升级到DataFrame的?

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是spark专题的第五篇,我们来看看DataFrame. 用过Python做过机器学习的同学对Python当中pandas当中的Data ...

  8. 【Spark】使用java语言开发spark程序

    目录 步骤 一.创建maven工程,导入jar包 二.开发代码 步骤 一.创建maven工程,导入jar包 <properties> <scala.version>2.11.8 ...

  9. web概念简述,HTML学习笔记

    今日内容 1. web概念概述 2. HTML web概念概述 * JavaWeb: * 使用Java语言开发基于互联网的项目 * 软件架构: 1. C/S: Client/Server 客户端/服务 ...

  10. properties文件导出

    功能要求根据数据库记录的key-value-remark 数据,导出保存properties文件 1. pro.load()  pro.list() 处理不能解决备注.排序问题 2. 最后考虑下什么是 ...