Java Web 網絡商城案例演示二十三 管理員界面異步顯示訂單詳情 修改訂單狀態

Java Web 網絡商城案例演示二十三 管理員界面異步顯示訂單詳情

思路

1、將當前的功能要實現的最終效果先實現靜態的效果
order/list.jsp

<table border="1" width="100%">
	 <tr>
			<th>商品</th>
			<th>名稱</th>
			<th>單價</th>
			<th>數量</th>
	</tr>
	<tr>
		<td><img src="/store_v5/products/1/c_0001.jpg" width="50px"></td>
		<td>xxxxx</td>
		<td>xxxxx</td>
		<td>xxxxx</td>
	</tr> 
</table>

2、 用戶在點擊詳情按鈕的時候,要向服務端發起ajax請求,向服務端傳遞訂單的ID,

3、服務端獲取到訂單的ID,查詢 這個訂單下所有的訂單項以及訂單項對應的商品信息,返回集合
4、
5、調試,排除2端錯誤
6、在客 戶端獲取到服務端響應回的JSON格式的數據,將這些數據綁定在頁面上

order/list.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<HTML>
<HEAD>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="${pageContext.request.contextPath}/css/Style1.css"
	rel="stylesheet" type="text/css" />
<script language="javascript"
	src="${pageContext.request.contextPath}/js/public.js"></script>
<script type="text/javascript"
	src="${pageContext.request.contextPath}/js/jquery-1.11.3.min.js"></script>

</HEAD>
<body>
	<br>
	<form id="Form1" name="Form1"
		action="${pageContext.request.contextPath}/user/list.jsp"
		method="post">
		<table cellSpacing="1" cellPadding="0" width="100%" align="center"
			bgColor="#f5fafe" border="0">
			<TBODY>
				<tr>
					<td class="ta_01" align="center" bgColor="#afd1f3"><strong>訂單列表</strong>
					</TD>
				</tr>

				<tr>
					<td class="ta_01" align="center" bgColor="#f5fafe">
						<table cellspacing="0" cellpadding="1" rules="all"
							bordercolor="gray" border="1" id="DataGrid1"
							style="BORDER-RIGHT: gray 1px solid; BORDER-TOP: gray 1px solid; BORDER-LEFT: gray 1px solid; WIDTH: 100%; WORD-BREAK: break-all; BORDER-BOTTOM: gray 1px solid; BORDER-COLLAPSE: collapse; BACKGROUND-COLOR: #f5fafe; WORD-WRAP: break-word">
							<tr
								style="FONT-WEIGHT: bold; FONT-SIZE: 12pt; HEIGHT: 25px; BACKGROUND-COLOR: #afd1f3">

								<td align="center" width="5%">序號</td>
								<td align="center" width="20%">訂單編號</td>
								<td align="center" width="5%">訂單金額</td>
								<td align="center" width="5%">收貨人</td>
								<td align="center" width="5%">訂單狀態</td>
								<td align="center" width="60%">訂單詳情</td>
							</tr>
							<c:forEach items="${allOrders }" var="o" varStatus="status">
								<tr onmouseover="this.style.backgroundColor = 'white'"
									onmouseout="this.style.backgroundColor = '#F5FAFE';">
									<td style="CURSOR: hand; HEIGHT: 22px" align="center"
										width="5%">${status.count }</td>
									<td style="CURSOR: hand; HEIGHT: 22px" align="center"
										width="20%">${o.oid }</td>
									<td style="CURSOR: hand; HEIGHT: 22px" align="center"
										width="5%">${o.total }</td>
									<td style="CURSOR: hand; HEIGHT: 22px" align="center"
										width="5%">${o.name }</td>
									<td style="CURSOR: hand; HEIGHT: 22px" align="center"
										width="5%"><c:if test="${o.state==1 }">未付款</c:if> <c:if
											test="${o.state==2 }">
											<a href="">發貨</a>
										</c:if> <c:if test="${o.state==3 }">已發貨</c:if> <c:if
											test="${o.state==4 }">訂單完成</c:if></td>
									<td align="center" style="HEIGHT: 22px" width="60%">
									<input type="button" value="訂單詳情" id="${o.oid}" class="myClass"/>
										<table border="1" width="100%">
											<!-- <tr>
												<th>商品</th>
												<th>名稱</th>
												<th>單價</th>
												<th>數量</th>
											</tr>
											<tr><td><img src="/store_v5/products/1/c_0001.jpg" width="50px"></td><td>xxxxx</td><td>xxxxx</td><td>xxxxx</td></tr> -->

										</table>
									</td>
								</tr>
							</c:forEach>
						</table>
					</td>
				</tr>
				<tr align="center">
					<td colspan="7"></td>
				</tr>
			</TBODY>
		</table>
	</form>
</body>
<script type="text/javascript">

$(function(){
	//頁面加載完畢之後,獲取樣式名稱爲myClass一批元素,爲其綁定點擊事件
	$(".myClass").click(function(){
		//獲取當前myClass的id="${o.oid}" 訂單的ID
		var id = this.id;
		
		//獲取當前myClass按鈕的文字
		var txt = this.value;
		//獲取到當前元素的下一個對象table
		var $tb=$(this).next();
		
		if(txt=="訂單詳情"){	
		//向服務端發送Ajax請求,將當前訂單的ID傳遞到服務端
		var url="/store_v5/AdminOrderServlet";
		var obj = {"method":"findOrderByOidWithAjax","id":id};	
		$.post(url,obj,function(data){
			//var $tb=$(this).next();  //此處坑爹,錯誤的寫法
			//alert(data);
			//清除內容
			$tb.html("");
			var th="<tr><th>商品</th><th>名稱</th><th>單價</th><th>數量</th></tr>";
			$tb.append(th);
			
			//利用JQUERY遍歷響應到客戶端的數據
			$.each(data,function(i,obj){
				var td="<tr><td><img  src='/store_v5/"+obj.product.pimage+"' width='50px'/></td><td>"+obj.product.pname+"</td><td>"+obj.product.shop_price+"</td><td>"+obj.quantity+"</td></tr>";
				$tb.append(td);				
			})
		},"json");
		
		//變換按鈕的文字、
		this.value="關閉";
		
		/* $.post(發送請求的路徑,方法以及攜帶的數值,返回的參數,"返回參數的格式"); */
		}else{
			//變換按鈕的文字、
			this.value="訂單詳情";
			//清空表格的內容
			$tb.html("");
		}
	});
});
</script>
</HTML>

AdminOrderServlet

// findOrderByOidWithAjax
	public String findOrderByOidWithAjax(HttpServletRequest request, HttpServletResponse response) throws Exception {

		// 服務端獲取到訂單的ID,
		String oid = request.getParameter("id");
		// 查詢 這個訂單下所有的訂單項以及訂單項對應的商品信息,返回集合
		OrderService orderService = new OrderServiceImpl();
		Order order = orderService.findOrderByOid(oid);
		// 將返回的集合轉換爲JSON格式的字符串,
		String jsonStr = JSONArray.fromObject(order.getList()).toString();
		//響應到客戶端
		
		response.setContentType("application/json;charset=utf-8");//設置響應數據的格式
		
		response.getWriter().println(jsonStr);//將json格柵燈數據發送到客戶端

		return null;
	}

修改訂單狀態

原理分析

在這裏插入圖片描述

步驟實現

1、準備工作:
admin/order/list.jsp

<a href="/store_v5/AdminOrderServlet?method=updateOrderByOid&oid=${o.oid }">發貨</a>

在這裏插入圖片描述
2、AdminOrderServlet–>updateOrderByOid方法當中、

// updateOrderByOid
	public String updateOrderByOid(HttpServletRequest request, HttpServletResponse response) throws Exception {
		// 獲取訂單的id
		String oid = request.getParameter("oid");
		// 根據訂單的id查詢訂單
		OrderService orderService = new OrderServiceImpl();
		Order order = orderService.findOrderByOid(oid);
		// 設置訂單的狀態
		order.setState(3);
		// 修改數據庫當中的訂單信息
		orderService.updateOrder(order);
		// 從新定向到到查詢已發貨訂單
		response.sendRedirect("/store_v5/AdminOrderServlet?method=findOrders&state=3");
		return null;
	}

3、service dao是用的以前的(已經實現的)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章