根据购物车中的商品名称和数量生成了结算信息,并可以填写收货人姓名、联系电话和收货地址,本任务将实现提交订单的功能。
一、创建订单页面order.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="p" uri="http://www.itcast.cn/tag"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head><title>电子书城</title><link rel="stylesheet" href="${pageContext.request.contextPath}/client/css/main.css" type="text/css" /><script type="text/javascript" src="${pageContext.request.contextPath}/client/js/order.js"></script>
</head>
<body class="main"><p:user/><jsp:include page="head.jsp" /><jsp:include page="menu_search.jsp" /><div id="divpagecontent"><table width="100%" border="0" cellspacing="0"><tr><td><div style="text-align:right; margin:5px 10px 5px 0px"><a href="${pageContext.request.contextPath }/index.jsp">首页</a> > <a href="${pageContext.request.contextPath}/client/cart.jsp"> 购物车</a> > 订单</div><form id="orderForm" action="${pageContext.request.contextPath}/createOrder" method="post"><table cellspacing="0" class="infocontent"><tr><td><table width="100%" border="0" cellspacing="0"><tr><td><img src="images/buy2.gif" width="635" height="38" /><p>你好,${user.username}!欢迎您来到网上书城结算中心</p></td></tr><tr><td><table cellspacing="1" class="carttable"><tr><td width="10%">序号</td><td width="40%">商品名称</td><td width="10%">价格</td><td width="10%">类别</td><td width="10%">数量</td><td width="10%">小计</td></tr></table> <c:set value="0" var="totalPrice"/><c:forEach items="${cart}" var="entry" varStatus="vs"><table width="100%" border="0" cellspacing="0"><tr><td width="10%">${vs.count}</td><td width="40%">${entry.key.name }</td><td width="10%">${entry.key.price }</td><td width="10%">${entry.key.category}</td><td width="10%"><input name="text" type="text" value="${entry.value}" style="width:20px" readonly="readonly"/></td><td width="10%">${entry.key.price*entry.value}</td></tr></table><c:set var="totalPrice" value="${totalPrice+entry.key.price*entry.value}"/></c:forEach><table cellspacing="1" class="carttable"><tr><td style="text-align:right; padding-right:40px;"><fontstyle="color:#FF0000">合计: ${totalPrice}元</font><input type="hidden" name="money" value="${totalPrice}"></td></tr></table><p>收货地址:<input id="receiverAddress" name="receiverAddress" type="text" value=""style="width:350px" onkeyup="checkReceiverAddress();" /> <span id="receiverAddressMsg"></span><br/>收货人: <input id="receiverName" name="receiverName" type="text" value="${user.username}" style="width:150px" onkeyup="checkReceiverName();" /><span id="receiverNameMsg"></span> <br/> 联系方式:<input type="text" id="receiverPhone" name="receiverPhone" value="${user.telephone}" style="width:150px" onkeyup="checkReceiverPhone();" /><span id="receiverPhoneMsg"></span> </p><hr /><p style="text-align:right"><img src="images/gif53_029.gif" width="204" height="51" border="0" onclick="checkOnSubmit();"/></p></td></tr></table></td></tr></table></form></td></tr></table></div><jsp:include page="foot.jsp" />
</body>
</html>
二、创建CreateOrderServlet
//生成订单
public class CreateOrderServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 1.得到当前用户HttpSession session = request.getSession();User user = (User) session.getAttribute("user");// 2.从购物车中获取商品信息Map<Product, Integer> cart = (Map<Product, Integer>)session.getAttribute("cart");// 3.将数据封装到订单对象中Order order = new Order();try {BeanUtils.populate(order, request.getParameterMap());} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}order.setId(IdUtils.getUUID());// 封装订单idorder.setUser(user);// 封装用户信息到订单.for (Product p : cart.keySet()) {OrderItem item = new OrderItem();item.setOrder(order);item.setBuynum(cart.get(p));item.setP(p);order.getOrderItems().add(item);}System.out.println(order);// 4.调用service中添加订单操作.OrderService service = new OrderService();service.addOrder(order);
// request.getRequestDispatcher("/client/orderlist.jsp").forward(request, response);response.sendRedirect(request.getContextPath() + "/client/createOrderSuccess.jsp");}}
需要注意的是,在进行生成订单时,不仅需要把订单信息保存到订单表,还需要将订单项保存到订单条目表,并且修改商品表中该商品的库存数量。