需要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. 为什么要学习微信小程序直播开发?最新的小程序直播介绍和优势分析!

    小程序直播的介绍 “小程序直播”是微信提供给开发者的实时视频直播工具,包括直播管理端.主播端和观众端等模块,支持提供常用的用户互动和营销促销工具. 开发者只需在小程序中引入相关代码并在管理后台完成配置 ...

  2. 初识Java和JDK下载安装

    故事:Java帝国的诞生 对手: C&C++ ◆1972年C诞生 ◆贴近硬件,运行极快,效率极高. ◆操作系统,编译器,数据库,网络系统等 ◆指针和内存管理 ◆1982年C++诞生 ◆面向对象 ...

  3. java基础篇 之 非静态内部类

    什么是非静态内部类: public class Outer { Outer() { System.out.println("我是外部类"); } class Inner { Inn ...

  4. 【华为云技术分享】MongoDB经典故障系列五:sharding集群执行sh.stopBalancer()命令被卡住怎么办?

    [摘要] MongoDB sharding集群执行sh.stopBalancer()命令时被卡住怎么办?别慌,华为云数据库来给您支招,收下这份方案指南,让您分分钟远离被自建MongoDB数据库支配的恐 ...

  5. Linux设备子系统初始化

    本文介绍的内容是基于Linux3.1源码,并参考了很多网上找来的资料 Linux内核的启动的流程如下: start_kernel->rest_init->kernel_init->d ...

  6. vue.js 实现点击展开收起动画

    最近公司项目加了个页面,其中要求是这样的,点击对应列表,展开和收起, 其实就是显示和隐藏内容部分:说来惭愧,我花了半天时间才搞出来(自黑一下~), ,,接下来分享给大家,先上效果图: .vue页面: ...

  7. [csu1392]YY一下

    题意:给定x,求有多少个10^8以内的数满足这个数乘以x以后,最高位到了最低位.设最高位的数字和剩余长度,列等式推理即可. #pragma comment(linker, "/STACK:1 ...

  8. 在微服务框架Demo.MicroServer中添加SkyWalking+SkyApm-dotnet分布式链路追踪系统

    1.APM工具的选取 Apm监测工具很多,这里选用网上比较火的一款Skywalking. Skywalking是一个应用性能监控(APM)系统,Skywalking分为服务端Oap.管理界面UI.以及 ...

  9. JSP+Servlet+JDBC+mysql实现的个人日记本系统

    项目简介 项目来源于:https://gitee.com/wishwzp/Diary 本系统基于JSP+Servlet+Mysql 一个基于JSP+Servlet+Jdbc的个人日记本系统.涉及技术少 ...

  10. Amaze UI学习笔记——JS学习历程一

    1.自定义事件 (1)一些组件提供了自定义事件,命名方式为{事件名称}.{组件名称}.amui,用户可以查看组件文档了解.使用这些事件,如: $('#myAlert').on('close.alert ...