需要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. Spring Boot 整合 Dubbo和Zookeeper

    Spring Boot 整合 Dubbo和Zookeeper Spring Boot 整合 Dubbo和Zookeeper 环境介绍 Zookeeper 安装 启动 Dubbo admin 搭建 创建 ...

  2. 线程池(Java中有哪些方法获取多线程)

    线程池(Java中有哪些方法获取多线程) 前言 获取多线程的方法,我们都知道有三种,还有一种是实现Callable接口 实现Runnable接口 实现Callable接口 实例化Thread类 使用线 ...

  3. 蓝桥杯2019初赛]迷宫(dfs版本)

    传送门 大意: 题目的意思还是模板的搜索,不同的是我们要记录路径了,而且是最短字典序最小的路径. 思路: 1.对于字典序最小,也就是说我们要尽量先往下走,然后是左- 这个很简单,因为在dfs中是顺序枚 ...

  4. P2766 最长不下降子序列问题 网络流重温

    P2766 最长不下降子序列问题 这个题目还是比较简单的,第一问就是LIS 第二问和第三问都是网络流. 第二问要怎么用网络流写呢,首先,每一个只能用一次,所以要拆点. 其次,我们求的是长度为s的不下降 ...

  5. spring 事务管理配置

    本篇文章只涉及spring事务的配置,不进行事务的介绍. spring通过PlatformTransactionManager接口作为事务管理器来进行事务的管理,它本身并不进行事务的创建以及相关操作, ...

  6. CC2530串口通信

    任何USART双向通信至少需要两个脚:接收数据输入(RX)和发送数据输出(TX). RX:接收数据串行输入.通过采样技术来区别数据和噪音,从而恢复数据. TX :发送数据输出.当发送器被禁止时,输出引 ...

  7. Spring官网阅读(十七)Spring中的数据校验

    文章目录 Java中的数据校验 Bean Validation(JSR 380) 使用示例 Spring对Bean Validation的支持 Spring中的Validator 接口定义 UML类图 ...

  8. Idea中查看一个类的所有资料及其层级关系

    在Idea中直接Ctrl + t 查看类的子类是可以看到,但是他没有那种层级顺序! 我们可以在类中点击顶部菜单Navigate -----> Type Hierarchy

  9. Go实战面试备忘录

    原文地址:https://blog.likeli.top/posts/面试/go面试备忘录/ 一个小厂的面试,记录一下,答案不对的,请帮忙更正下 go部分 map底层实现 map底层通过哈希表实现 s ...

  10. Viterbi-Algorithm(维特比)算法

    CSDN博客:皮乾东  知乎:Htrying  微博:Htring的微博  微信公众号:自然语言处理爱好者(ID:NLP_lover)  文章来自:<数学之美> Viterbi-Algor ...