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" />&nbsp;&nbsp;&nbsp;&nbsp; <input type="radio"
                            name="pd_FrpId" value="BOC-NET-B2C" />中国银行 <img
                            src="./bank_img/bc.bmp" align="middle" />&nbsp;&nbsp;&nbsp;&nbsp;
                        <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" />&nbsp;&nbsp;&nbsp;&nbsp;
                        <input type="radio" name="pd_FrpId" value="PINGANBANK-NET" />平安银行
                        <img src="./bank_img/pingan.bmp" align="middle" />&nbsp;&nbsp;&nbsp;&nbsp;
                        <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" />&nbsp;&nbsp;&nbsp;&nbsp;
                        <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>

 

posted @ 2018-10-24 15:32  一日看尽长安花cxjj  阅读(447)  评论(0编辑  收藏  举报