day04 --订单提交 更新收货人信息(js提交表单,隐藏域)
cart.jsp
</em> 赠送积分: <em style="color:#ff6600;">596</em> 商品金额: <strong style="color:#ff6600;">${cart.total }元 </strong> </div> <div style="text-align:right;margin-top:10px;margin-bottom:10px;"> <a href="javascript:void(0)" onlick="clearCart();" id="clear" class="clear">清空购物车</a> <a href="${pageContext.request.contextPath }/product?method=submitOrder"> <input type="button" width="100" value="提交订单" name="submit" border="0" style="background: url('./images/register.gif') no-repeat scroll 0 0 rgba(0, 0, 0, 0); height:35px;width:100px;color:white;"> </a> </div> </div>
Order
public class Order { private String oid;//订单的订单号 private Date ordertime;//下单时间 private double total;//该订单总金额 private int state;//订单状态 1代表已付款,0代表未付款 private String addr;//收货地址 private String name;//收货人 private String telephone;//收货人电话 private User user;//该订单属于哪个用户 //该订单中有多少订单项 List<OrderItem> orderItems = new ArrayList(); public String getOid() { return oid; } public void setOid(String oid) { this.oid = oid; } public Date getOrdertime() { return ordertime; } public void setOrdertime(Date ordertime) { this.ordertime = ordertime; } public double getTotal() { return total; } public void setTotal(double total) { this.total = total; } public int getState() { return state; } public void setState(int state) { this.state = state; } public String getAddr() { return addr; } public void setAddr(String addr) { this.addr = addr; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getTelephone() { return telephone; } public void setTelephone(String telephone) { this.telephone = telephone; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } public List<OrderItem> getOrderItems() { return orderItems; } public void setOrderItems(List<OrderItem> orderItems) { this.orderItems = orderItems; } }
OrderItem
public class OrderItem { private String itemid;//订单项id private int count;//订单内商品的购买数量 private double subtotal;//订单项小计 private Product product;//订单项内部的商品 private Order order;//该订单项属于哪个订单 public String getItemid() { return itemid; } public void setItemid(String itemid) { this.itemid = itemid; } public int getCount() { return count; } public void setCount(int count) { this.count = count; } public double getSubtotal() { return subtotal; } public void setSubtotal(double subtotal) { this.subtotal = subtotal; } public Product getProduct() { return product; } public void setProduct(Product product) { this.product = product; } public Order getOrder() { return order; } public void setOrder(Order order) { this.order = order; } }
public class ProductServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setContentType("text/html; charset=UTF-8"); //获得请求的方法 String methodName = request.getParameter("method"); if("productList".equals(methodName)){ productList(request,response); }else if("categoryList".equals(methodName)){ categoryList(request,response); }else if("index".equals(methodName)){ index(request,response); }else if("productInfo".equals(methodName)){ productInfo(request,response); }else if("addProductToCart".equals(methodName)){ addProductToCart(request,response); }else if("delProFromCart".equals(methodName)){ delProFromCart(request,response); }else if("submitOrder".equals(methodName)){ submitOrder(request,response); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } //确认订单--更新收货人信息 public void confirmOrder(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ //更新收货人信息 Map<String, String[]> properties = request.getParameterMap(); Order order = new Order(); try { BeanUtils.populate(order, properties); } catch (IllegalAccessException | InvocationTargetException e) { e.printStackTrace(); } ProductService service = new ProductService(); service.updateOrderAddr(order); } //提交订单 public void submitOrder(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ HttpSession session = request.getSession(); //判断用户已经登录,如果未登录,下面代码不执行 /*User user = (User) session.getAttribute("user"); if(user == null){ response.sendRedirect(request.getContextPath()+"/login.jsp"); return; }*/ User user = new User(); user.setUid("42d049d84c3a"); //目的:封装好一个Order对象,并传递给service层 Order order = new Order(); //private String oid;//订单的订单号 String oid = CommonsUtils.getUUID(); order.setOid(oid); //private Date ordertime;//下单时间 order.setOrdertime(new Date()); //private double total;//该订单总金额 //获得购物车 Cart cart = (Cart) session.getAttribute("cart"); double total = cart.getTotal(); order.setTotal(total); //private int state;//订单状态 1代表已付款,0代表未付款 order.setState(0); //private String addr;//收货地址 order.setAddr(null); //private String name;//收货人 order.setName(null); //private String telephone;//收货人电话 order.setTelephone(null); //private User user;//该订单属于哪个用户 order.setUser(user); //该订单中有多少订单项 //List<OrderItem> orderItems = new ArrayList(); //获得购物车中的购物项Map Map<String, CartItem> cartItems = cart.getCartItems(); for(Map.Entry<String,CartItem> entry:cartItems.entrySet()){ //取出每一个购物项 CartItem cartItem = entry.getValue(); //创建新的订单项 OrderItem orderItem = new OrderItem(); //1)private String itemid;//订单项id orderItem.setItemid(CommonsUtils.getUUID()); //2)private int count;//订单内商品的购买数量 orderItem.setCount(cartItem.getBuyNum()); //3)private double subtotal;//订单项小计 orderItem.setSubtotal(cartItem.getSubtotal()); //4)private Product product;//订单项内部的商品 orderItem.setProduct(cartItem.getProduct()); //5)private Order order;//该订单项属于哪个订单 orderItem.setOrder(order); //将该订单项添加到订到的订单集合中 order.getOrderItems().add(orderItem); } //order对象封装完毕 //传递数据到service层 ProductService service = new ProductService(); service.submitOrder(order); //存储订单数据 session.setAttribute("order", order); //页面跳转 response.sendRedirect(request.getContextPath()+"/order_info.jsp"); } }
ProductService
public class ProductService { //提交订单 将订单的数据和订单项的数据提交到数据库 public void submitOrder(Order order) { ProductDao dao = new ProductDao(); try { //1.开启事务 DataSourceUtils.startTransaction(); //2.调用dao存储order表数据的方法 dao.insertOrders(order); //3.调用dao存储orderitem表数据的方法 dao.insertOrderItem(order); } catch (SQLException e) { try { DataSourceUtils.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } e.printStackTrace(); }finally{ try { DataSourceUtils.commitAndRelease(); } catch (SQLException e) { e.printStackTrace(); } } } //更新收货人信息 public void updateOrderAddr(Order order) { ProductDao dao = new ProductDao(); try { dao.updateOrderAddr(order); } catch (SQLException e) { e.printStackTrace(); } } }
ProductDao
public class ProductDao { //向orders表插入数据 public void insertOrders(Order order) throws SQLException { QueryRunner runner = new QueryRunner(); String sql = "insert into orders values(?,?,?,?,?,?,?,?)"; Connection conn = DataSourceUtils.getConnection(); runner.update(conn, sql, order.getOid(),order.getOrdertime(),order.getTotal(),order.getState(), order.getAddr(),order.getName(),order.getTelephone(),order.getUser().getUid()); } //向orderitem表插入数据 public void insertOrderItem(Order order) throws SQLException { QueryRunner runner = new QueryRunner(); String sql = "insert into orderitem values(?,?,?,?,?)"; Connection conn = DataSourceUtils.getConnection(); List<OrderItem> orderItems = order.getOrderItems(); for(OrderItem item : orderItems){ runner.update(conn,sql,item.getItemid(),item.getCount(),item.getSubtotal(),item.getProduct().getPid(), item.getOrder().getOid()); } } //更新收货人信息 public void updateOrderAddr(Order order) throws SQLException { QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource()); String sql = "update orders set address=?,name=?,telephone=? where oir=?"; runner.update(sql,order.getAddr(),order.getName(),order.getTelephone(),order.getOid()); } }
order_info.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>会员登录</title> <link rel="stylesheet" href="css/bootstrap.min.css" type="text/css" /> <script src="js/jquery-1.11.3.min.js" type="text/javascript"></script> <script src="js/bootstrap.min.js" type="text/javascript"></script> <!-- 引入自定义css文件 style.css --> <link rel="stylesheet" href="css/style.css" type="text/css" /> <style> body { margin-top: 20px; margin: 0 auto; } .carousel-inner .item img { width: 100%; height: 300px; } </style> <script type="text/javascript"> function confirmOrder(){ $("#orderForm").submit(); } </script> </head> <body> <!-- 引入header.jsp --> <jsp:include page="/header.jsp"></jsp:include> <div class="container"> <div class="row"> <div style="margin: 0 auto; margin-top: 10px; width: 950px;"> <strong>订单详情</strong> <table class="table table-bordered"> <tbody> <tr class="warning"> <th colspan="5">订单编号:${order.oid }</th> </tr> <tr class="warning"> <th>图片</th> <th>商品</th> <th>价格</th> <th>数量</th> <th>小计</th> </tr> <c:forEach items="${order.orderItems }" var="orderItem"> <tr class="active"> <td width="60" width="40%"><input type="hidden" name="id" value="22"> <img src="${orderItem.product.pimage }" width="70" height="60"> </td> <td width="30%"><a target="_blank">${orderItem.product.pname }</a></td> <td width="20%">${orderItem.product.shop_price }</td> <td width="10%">${orderItem.count }</td> <td width="15%"><span class="subtotal">${orderItem.subtotal }</span></td> </tr> </c:forEach> </tbody> </table> </div> <div style="text-align: right; margin-right: 120px;"> 商品金额: <strong style="color: #ff6600;">${order.total }</strong> </div> </div> <div> <hr /> <form class="form-horizontal" action="${pageContext.request.contextPath }/product" method="post" style="margin-top: 5px; margin-left: 150px;" id="orderForm"> <!-- method的名字通过表单提交 --> <input type="hidden" name="method" value="confirmOrder"> <!-- 传递订单Id --> <input type="hidden" name="oid" value="${order.oid }"> <div class="form-group"> <label for="username" class="col-sm-1 control-label">地址</label> <div class="col-sm-5"> <input type="text" class="form-control" id="address" name="address" placeholder="请输入收货地址"> </div> </div> <div class="form-group"> <label for="inputPassword3" class="col-sm-1 control-label">收货人</label> <div class="col-sm-5"> <input type="password" class="form-control" id="inputPassword3" name="name" placeholder="请输收货人"> </div> </div> <div class="form-group"> <label for="confirmpwd" class="col-sm-1 control-label">电话</label> <div class="col-sm-5"> <input type="password" class="form-control" id="confirmpwd" name="telephone" placeholder="请输入联系方式"> </div> </div> <hr /> <div style="margin-top: 5px; margin-left: 150px;"> <strong>选择银行:</strong> <p> <br /> <input type="radio" name="pd_FrpId" value="ICBC-NET-B2C" checked="checked" />工商银行 <img src="./bank_img/icbc.bmp" align="middle" /> <input type="radio" name="pd_FrpId" value="BOC-NET-B2C" />中国银行 <img src="./bank_img/bc.bmp" align="middle" /> <input type="radio" name="pd_FrpId" value="ABC-NET-B2C" />农业银行 <img src="./bank_img/abc.bmp" align="middle" /> <br /> <br /> <input type="radio" name="pd_FrpId" value="BOCO-NET-B2C" />交通银行 <img src="./bank_img/bcc.bmp" align="middle" /> <input type="radio" name="pd_FrpId" value="PINGANBANK-NET" />平安银行 <img src="./bank_img/pingan.bmp" align="middle" /> <input type="radio" name="pd_FrpId" value="CCB-NET-B2C" />建设银行 <img src="./bank_img/ccb.bmp" align="middle" /> <br /> <br /> <input type="radio" name="pd_FrpId" value="CEB-NET-B2C" />光大银行 <img src="./bank_img/guangda.bmp" align="middle" /> <input type="radio" name="pd_FrpId" value="CMBCHINA-NET-B2C" />招商银行 <img src="./bank_img/cmb.bmp" align="middle" /> </p> <hr /> <p style="text-align: right; margin-right: 100px;"> <a href="javascript:;" onclick="confirmOrder();"> <img src="./images/finalbutton.gif" width="204" height="51" border="0" /> </a> </p> <hr /> </div> </form> </div> </div> <!-- 引入footer.jsp --> <jsp:include page="/footer.jsp"></jsp:include> </body> </html>