根据购物车中的商品名称和数量生成了结算信息,并可以填写收货人姓名、联系电话和收货地址,本任务将实现提交订单的功能。
一、创建订单页面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;"><font
style="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());// 封装订单id
order.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");
}
}
需要注意的是,在进行生成订单时,不仅需要把订单信息保存到订单表,还需要将订单项保存到订单条目表,并且修改商品表中该商品的库存数量。