<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [TOC] # 步驟 1 : 先運行,看到效果,再學習 先將完整的項目(向老師要相關資料),配置運行起來,確認可用之后,再學習做了哪些步驟以達到這樣的效果。 # 步驟 2 : 模仿和排錯 在確保可運行項目能夠正確無誤地運行之后,再嚴格照著教程的步驟,對代碼模仿一遍。 模仿過程難免代碼有出入,導致無法得到期望的運行結果,此時此刻通過比較**正確答案** ( 可運行項目 ) 和自己的代碼,來定位問題所在。 采用這種方式,**學習有效果,排錯有效率**,可以較為明顯地提升學習速度,跨過學習路上的各個檻。 # 步驟 3 : 準備數據SQL 訂單數據,以及其對應的訂單項數據,都是由前臺功能增加的。 為了在后臺演示效果,需要自己在數據庫中插入數據 1. 訂單: ``` insert into t_order (order_code, address, post, receiver, mobile, user_message, create_date, pay_date, delivery_date, confirm_date, status, user_id) VALUES ('201608241638122609867','某某市,某某區,某某街道,某某號 ','610000','某某某','15111111111',NULL,'2018-08-30',NULL,NULL,NULL,'waitDelivery',1); ``` 注: 倒數第一個參數1是對應的用戶id,需要在數據庫中存在,請根據自己的數據信息自行修改。 2. 訂單項 ``` insert into t_order_item (number, user_id, product_id, order_id) VALUES (2,1,1,1); insert into t_order_item (number, user_id, product_id, order_id) VALUES (3,1,2,1); ``` 注: 第三個參數1、2分別對應的產品id,需要在數據庫中存在,請根據自己的數據信息自行修改。 # 步驟 4 : 頁面截圖 ![](https://box.kancloud.cn/1920f2555e356f3dddf17625ff454fa4_1847x449.png) # 步驟 5:Order.java,OrderItem.java實體類 1\. 與OrderItem的一對多關系 2\. total,totalNumber 這個訂單的總金額和總數量 Order ``` package com.dodoke.bean; import java.util.Date; import java.util.List; import com.dodoke.dao.inter.OrderDao; /******************************************************************************* * javaBeans t_order --> TOrder <table explanation> * * @author 2019-01-17 08:35:28 * */ public class Order { // field /** ID **/ private int id; /** 訂單編號 **/ private String orderCode; /** 地址 **/ private String address; /** 郵編 **/ private String post; /** 收件人 **/ private String receiver; /** 手機號 **/ private String mobile; /** 買家留言 **/ private String userMessage; /** 創建時間 **/ private Date createDate; /** 支付時間 **/ private Date payDate; /** 發貨時間 **/ private Date deliveryDate; /** 確認收貨時間 **/ private Date confirmDate; /** 狀態 **/ private String status; /** 所屬用戶 **/ private User user; /** * 訂單對應的訂單項 */ private List<OrderItem> orderItems; /** * 總價格 */ private float total; /** * 總數量 */ private int totalNumber; // method public int getId() { return id; } public void setId(int id) { this.id = id; } public String getOrderCode() { return orderCode; } public void setOrderCode(String orderCode) { this.orderCode = orderCode; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getPost() { return post; } public void setPost(String post) { this.post = post; } public String getReceiver() { return receiver; } public void setReceiver(String receiver) { this.receiver = receiver; } public String getMobile() { return mobile; } public void setMobile(String mobile) { this.mobile = mobile; } public String getUserMessage() { return userMessage; } public void setUserMessage(String userMessage) { this.userMessage = userMessage; } public Date getCreateDate() { return createDate; } public void setCreateDate(Date createDate) { this.createDate = createDate; } public Date getPayDate() { return payDate; } public void setPayDate(Date payDate) { this.payDate = payDate; } public Date getDeliveryDate() { return deliveryDate; } public void setDeliveryDate(Date deliveryDate) { this.deliveryDate = deliveryDate; } public Date getConfirmDate() { return confirmDate; } public void setConfirmDate(Date confirmDate) { this.confirmDate = confirmDate; } public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } 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; } public float getTotal() { return total; } public void setTotal(float total) { this.total = total; } public int getTotalNumber() { return totalNumber; } public void setTotalNumber(int totalNumber) { this.totalNumber = totalNumber; } /** * 判斷訂單狀態 * * @return */ public String getStatusDesc() { String desc = "未知"; switch (status) { case OrderDao.waitPay: desc = "待付款"; break; case OrderDao.waitDelivery: desc = "待發貨"; break; case OrderDao.waitConfirm: desc = "待收貨"; break; case OrderDao.waitReview: desc = "等評價"; break; case OrderDao.finish: desc = "完成"; break; case OrderDao.delete: desc = "刪除"; break; default: desc = "未知"; } return desc; } } ``` OrderItem ``` package com.dodoke.bean; /******************************************************************************* * javaBeans t_order_item --> TOrderItem <table explanation> * * @author 2019-01-17 08:35:28 * */ public class OrderItem { // field /** ID **/ private int id; /** 數量 **/ private int number; /** 所屬用戶 **/ private User user; /** 所屬產品 **/ private Product product; /** 所屬訂單 **/ private Order order; // method public int getId() { return id; } public void setId(int id) { this.id = id; } public int getNumber() { return number; } public void setNumber(int number) { this.number = number; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } 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; } } ``` # 步驟 6:DaoUtil 將所有dao實現類,設計為單例模式,寫出如下dao工具類 ``` package com.dodoke.util; import com.dodoke.dao.impl.CategoryDaoImpl; import com.dodoke.dao.impl.OrderDaoImpl; import com.dodoke.dao.impl.OrderItemDaoImpl; import com.dodoke.dao.impl.ProductDaoImpl; import com.dodoke.dao.impl.ProductImageDaoImpl; import com.dodoke.dao.impl.PropertyDaoImpl; import com.dodoke.dao.impl.PropertyValueDaoImpl; import com.dodoke.dao.impl.UserDaoImpl; import com.dodoke.dao.inter.CategoryDao; import com.dodoke.dao.inter.OrderDao; import com.dodoke.dao.inter.OrderItemDao; import com.dodoke.dao.inter.ProductDao; import com.dodoke.dao.inter.ProductImageDao; import com.dodoke.dao.inter.PropertyDao; import com.dodoke.dao.inter.PropertyValueDao; import com.dodoke.dao.inter.UserDao; public class DaoUtil { public static CategoryDao categoryDao = CategoryDaoImpl.getInstance(); public static PropertyDao propertyDao = PropertyDaoImpl.getInstance(); public static ProductDao productDao = ProductDaoImpl.getInstance(); public static ProductImageDao productImageDao = ProductImageDaoImpl.getInstance(); public static PropertyValueDao propertyValueDao = PropertyValueDaoImpl.getInstance(); public static UserDao userDao = UserDaoImpl.getInstance(); public static OrderDao orderDao = OrderDaoImpl.getInstance(); public static OrderItemDao orderItemDAO = OrderItemDaoImpl.getInstance(); } ``` # 步驟 7:OrderDao和OrderDaoImpl ``` package com.dodoke.dao.inter; import java.util.List; import com.dodoke.bean.Order; public interface OrderDao { public static final String waitPay = "waitPay"; public static final String waitDelivery = "waitDelivery"; public static final String waitConfirm = "waitConfirm"; public static final String waitReview = "waitReview"; public static final String finish = "finish"; public static final String delete = "delete"; /** * 增加 * * @param order */ public void add(Order order); /** * 刪除 * * @param id */ public void delete(int id); /** * 修改 * * @param order */ public void update(Order order); /** * 根據id獲取 * * @param id * @return */ public Order get(int id); /** * 訂單分頁查詢 * * @param cid * @param start * @param count * @return */ public List<Order> list(int start, int count); /** * 所有訂單 * * @return */ public List<Order> list(); /** * 獲取訂單總數 * * @return */ public int getTotal(); } ``` OrderDaoImpl ``` package com.dodoke.dao.impl; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.Date; import java.util.List; import com.dodoke.bean.Order; import com.dodoke.bean.User; import com.dodoke.dao.inter.OrderDao; import com.dodoke.util.DBUtil; import com.dodoke.util.DaoUtil; import com.dodoke.util.DateUtil; public class OrderDaoImpl implements OrderDao { private static OrderDaoImpl orderDaoImpl = new OrderDaoImpl(); private OrderDaoImpl() { } public static OrderDaoImpl getInstance() { return orderDaoImpl; } @Override public void add(Order bean) { String sql = "insert into t_order (order_code, address, post, receiver, mobile, user_message,create_date, " + "pay_date, delivery_date, confirm_date, status, user_id) VALUES(?,?,?,?,?,?,?,?,?,?,?,?)"; try (Connection c = DBUtil.getConnection(); PreparedStatement ps = c.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);) { ps.setString(1, bean.getOrderCode()); ps.setString(2, bean.getAddress()); ps.setString(3, bean.getPost()); ps.setString(4, bean.getReceiver()); ps.setString(5, bean.getMobile()); ps.setString(6, bean.getUserMessage()); ps.setTimestamp(7, DateUtil.d2t(bean.getCreateDate())); ps.setTimestamp(8, DateUtil.d2t(bean.getPayDate())); ps.setTimestamp(9, DateUtil.d2t(bean.getDeliveryDate())); ps.setTimestamp(10, DateUtil.d2t(bean.getConfirmDate())); ps.setString(11, bean.getStatus()); ps.setInt(12, bean.getUser().getId()); ps.executeUpdate(); ResultSet rs = ps.getGeneratedKeys(); if (rs.next()) { int id = rs.getInt(1); bean.setId(id); } } catch (SQLException e) { e.printStackTrace(); } } @Override public void delete(int id) { String sql = "delete from t_order where id = ?"; try (Connection c = DBUtil.getConnection(); PreparedStatement ps = c.prepareStatement(sql);) { ps.execute(sql); } catch (SQLException e) { e.printStackTrace(); } } @Override public void update(Order bean) { String sql = "update t_order set address= ?, post=?, receiver=?,mobile=?,user_message=? ,create_date = ? , pay_date =? , delivery_date =?, " + "confirm_date = ? , order_code =?, user_id=?, status=? where id = ?"; try (Connection c = DBUtil.getConnection(); PreparedStatement ps = c.prepareStatement(sql);) { ps.setString(1, bean.getAddress()); ps.setString(2, bean.getPost()); ps.setString(3, bean.getReceiver()); ps.setString(4, bean.getMobile()); ps.setString(5, bean.getUserMessage()); ps.setTimestamp(6, DateUtil.d2t(bean.getCreateDate())); ps.setTimestamp(7, DateUtil.d2t(bean.getPayDate())); ps.setTimestamp(8, DateUtil.d2t(bean.getDeliveryDate())); ps.setTimestamp(9, DateUtil.d2t(bean.getConfirmDate())); ps.setString(10, bean.getOrderCode()); ps.setInt(11, bean.getUser().getId()); ps.setString(12, bean.getStatus()); ps.setInt(13, bean.getId()); ps.execute(); } catch (SQLException e) { e.printStackTrace(); } } @Override public Order get(int id) { Order bean = new Order(); String sql = "select * from t_Order where id = ?"; try (Connection c = DBUtil.getConnection(); PreparedStatement ps = c.prepareStatement(sql);) { ps.setInt(1, id); ResultSet rs = ps.executeQuery(); if (rs.next()) { String orderCode = rs.getString("order_code"); String address = rs.getString("address"); String post = rs.getString("post"); String receiver = rs.getString("receiver"); String mobile = rs.getString("mobile"); String userMessage = rs.getString("user_message"); String status = rs.getString("status"); int uid = rs.getInt("user_id"); Date createDate = DateUtil.t2d(rs.getTimestamp("create_date")); Date payDate = DateUtil.t2d(rs.getTimestamp("pay_date")); Date deliveryDate = DateUtil.t2d(rs.getTimestamp("delivery_date")); Date confirmDate = DateUtil.t2d(rs.getTimestamp("confirm_date")); bean.setOrderCode(orderCode); bean.setAddress(address); bean.setPost(post); bean.setReceiver(receiver); bean.setMobile(mobile); bean.setUserMessage(userMessage); bean.setCreateDate(createDate); bean.setPayDate(payDate); bean.setDeliveryDate(deliveryDate); bean.setConfirmDate(confirmDate); User user = DaoUtil.userDao.get(uid); bean.setUser(user); bean.setStatus(status); bean.setId(id); } } catch (SQLException e) { e.printStackTrace(); } return bean; } @Override public List<Order> list() { return list(0, Short.MAX_VALUE); } @Override public int getTotal() { int total = 0; String sql = "select count(*) from t_order"; try (Connection c = DBUtil.getConnection(); PreparedStatement ps = c.prepareStatement(sql);) { ResultSet rs = ps.executeQuery(sql); while (rs.next()) { total = rs.getInt(1); } } catch (SQLException e) { e.printStackTrace(); } return total; } @Override public List<Order> list(int start, int count) { List<Order> beans = new ArrayList<Order>(); String sql = "select * from t_order order by id desc limit ?,? "; try (Connection c = DBUtil.getConnection(); PreparedStatement ps = c.prepareStatement(sql);) { ps.setInt(1, start); ps.setInt(2, count); ResultSet rs = ps.executeQuery(); while (rs.next()) { Order bean = new Order(); String orderCode = rs.getString("order_code"); String address = rs.getString("address"); String post = rs.getString("post"); String receiver = rs.getString("receiver"); String mobile = rs.getString("mobile"); String userMessage = rs.getString("user_message"); String status = rs.getString("status"); Date createDate = DateUtil.t2d(rs.getTimestamp("create_date")); Date payDate = DateUtil.t2d(rs.getTimestamp("pay_date")); Date deliveryDate = DateUtil.t2d(rs.getTimestamp("delivery_date")); Date confirmDate = DateUtil.t2d(rs.getTimestamp("confirm_date")); int uid = rs.getInt("user_id"); int id = rs.getInt("id"); bean.setId(id); bean.setOrderCode(orderCode); bean.setAddress(address); bean.setPost(post); bean.setReceiver(receiver); bean.setMobile(mobile); bean.setUserMessage(userMessage); bean.setCreateDate(createDate); bean.setPayDate(payDate); bean.setDeliveryDate(deliveryDate); bean.setConfirmDate(confirmDate); User user = DaoUtil.userDao.get(uid); bean.setUser(user); bean.setStatus(status); beans.add(bean); } } catch (SQLException e) { e.printStackTrace(); } return beans; } } ``` # 步驟 8:OrderItemDao和OrderItemDaoImpl OrderItemDao ``` package com.dodoke.dao.inter; import java.util.List; import com.dodoke.bean.Order; import com.dodoke.bean.OrderItem; public interface OrderItemDao { /** * 為訂單設置訂單項集合 * * @param os */ public void fill(List<Order> os); public void fill(Order o); public List<OrderItem> listByOrder(int oid); /** * 查詢某種訂單下所有的訂單項 * * @param oid * @param start * @param count * @return */ public List<OrderItem> listByOrder(int oid, int start, int count); } ``` OrderItemDaoImpl ``` package com.dodoke.dao.impl; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import com.dodoke.bean.Order; import com.dodoke.bean.OrderItem; import com.dodoke.bean.Product; import com.dodoke.bean.User; import com.dodoke.dao.inter.OrderItemDao; import com.dodoke.util.DBUtil; import com.dodoke.util.DaoUtil; public class OrderItemDaoImpl implements OrderItemDao { private static OrderItemDaoImpl daoImpl = new OrderItemDaoImpl(); private OrderItemDaoImpl() { } public static OrderItemDaoImpl getInstance() { return daoImpl; } public void fill(List<Order> os) { for (Order o : os) { List<OrderItem> ois = listByOrder(o.getId()); float total = 0; int totalNumber = 0; for (OrderItem oi : ois) { total += oi.getNumber() * oi.getProduct().getPromotePrice(); totalNumber += oi.getNumber(); } o.setTotal(total); o.setOrderItems(ois); o.setTotalNumber(totalNumber); } } public void fill(Order o) { List<OrderItem> ois = listByOrder(o.getId()); float total = 0; for (OrderItem oi : ois) { total += oi.getNumber() * oi.getProduct().getPromotePrice(); } o.setTotal(total); o.setOrderItems(ois); } public List<OrderItem> listByOrder(int oid) { return listByOrder(oid, 0, Short.MAX_VALUE); } /** * 查詢某種訂單下所有的訂單項 * @param oid * @param start * @param count * @return */ public List<OrderItem> listByOrder(int oid, int start, int count) { List<OrderItem> beans = new ArrayList<OrderItem>(); String sql = "select * from t_order_item where order_id = ? order by id desc limit ?,? "; try (Connection c = DBUtil.getConnection(); PreparedStatement ps = c.prepareStatement(sql);) { ps.setInt(1, oid); ps.setInt(2, start); ps.setInt(3, count); ResultSet rs = ps.executeQuery(); while (rs.next()) { OrderItem bean = new OrderItem(); int id = rs.getInt(1); int pid = rs.getInt("product_id"); int uid = rs.getInt("user_id"); int number = rs.getInt("number"); Product product = DaoUtil.productDao.get(pid); if (-1 != oid) { Order order = DaoUtil.orderDao.get(oid); bean.setOrder(order); } User user = DaoUtil.userDao.get(uid); bean.setProduct(product); bean.setUser(user); bean.setNumber(number); bean.setId(id); beans.add(bean); } } catch (SQLException e) { e.printStackTrace(); } return beans; } } ``` # 步驟 9:OrderServlet.java 因為訂單的增加和刪除,都是在前臺進行的。 所以OrderServlet提供的是list方法和delivery(發貨)方法 ``` package com.dodoke.controller; import java.util.Date; import java.util.List; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.dodoke.bean.Order; import com.dodoke.dao.inter.OrderDao; import com.dodoke.util.DaoUtil; import com.dodoke.util.Page; /** * Servlet implementation class OrderServlet */ @WebServlet("/OrderServlet") public class OrderServlet extends BaseBackServlet { private static final long serialVersionUID = 1L; @Override public String add(HttpServletRequest request, HttpServletResponse response) { // TODO Auto-generated method stub return null; } @Override public String delete(HttpServletRequest request, HttpServletResponse response) { // TODO Auto-generated method stub return null; } @Override public String edit(HttpServletRequest request, HttpServletResponse response) { // TODO Auto-generated method stub return null; } @Override public String update(HttpServletRequest request, HttpServletResponse response) { // TODO Auto-generated method stub return null; } /** * 發貨 * * @param request * @param response * @return */ public String delivery(HttpServletRequest request, HttpServletResponse response) { int id = Integer.parseInt(request.getParameter("id")); Order o = DaoUtil.orderDao.get(id); o.setDeliveryDate(new Date()); o.setStatus(OrderDao.waitConfirm); DaoUtil.orderDao.update(o); return "@admin_order_list"; } public String list(HttpServletRequest request, HttpServletResponse response, Page page) { List<Order> os = DaoUtil.orderDao.list(page.getStart(), page.getCount()); DaoUtil.orderItemDAO.fill(os); int total = DaoUtil.orderDao.getTotal(); page.setTotal(total); request.setAttribute("os", os); request.setAttribute("page", page); return "admin/listOrder.jsp"; } } ``` # 步驟10:listOrder.jsp ``` <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@include file="../include/admin/adminHeader.jsp"%> <%@include file="../include/admin/adminNavigator.jsp"%> <script> $(function(){ $("button.orderPageCheckOrderItems").click(function(){ var oid = $(this).attr("oid"); $("tr.orderPageOrderItemTR[oid="+oid+"]").toggle(); }); }); </script> <title>訂單管理</title> <div class="workingArea"> <h1 class="label label-info" >訂單管理</h1> <br> <br> <div class="listDataTableDiv"> <table class="table table-striped table-bordered table-hover1 table-condensed"> <thead> <tr class="success"> <th>ID</th> <th>狀態</th> <th>金額</th> <th width="100px">商品數量</th> <th width="100px">買家名稱</th> <th>創建時間</th> <th>支付時間</th> <th>發貨時間</th> <th>確認收貨時間</th> <th width="120px">操作</th> </tr> </thead> <tbody> <c:forEach items="${os}" var="o"> <tr> <td>${o.id}</td> <td>${o.statusDesc}</td> <td>¥<fmt:formatNumber type="number" value="${o.total}" minFractionDigits="2"/></td> <td align="center">${o.totalNumber}</td> <td align="center">${o.user.name}</td> <td><fmt:formatDate value="${o.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/></td> <td><fmt:formatDate value="${o.payDate}" pattern="yyyy-MM-dd HH:mm:ss"/></td> <td><fmt:formatDate value="${o.deliveryDate}" pattern="yyyy-MM-dd HH:mm:ss"/></td> <td><fmt:formatDate value="${o.confirmDate}" pattern="yyyy-MM-dd HH:mm:ss"/></td> <td> <button oid=${o.id} class="orderPageCheckOrderItems btn btn-primary btn-xs">查看詳情</button> <c:if test="${o.status=='waitDelivery'}"> <a href="admin_order_delivery?id=${o.id}"> <button class="btn btn-primary btn-xs">發貨</button> </a> </c:if> </td> </tr> <tr class="orderPageOrderItemTR" oid=${o.id}> <td colspan="10" align="center"> <div class="orderPageOrderItem"> <table width="800px" align="center" class="orderPageOrderItemTable"> <c:forEach items="${o.orderItems}" var="oi"> <tr> <td align="left"> <img width="40px" height="40px" src="img/productSingle/${oi.product.firstProductImage.id}.jpg"> </td> <td> <a href="foreproduct?pid=${oi.product.id}"> <span>${oi.product.name}</span> </a> </td> <td align="right"> <span class="text-muted">${oi.number}個</span> </td> <td align="right"> <span class="text-muted">單價:¥${oi.product.promotePrice}</span> </td> </tr> </c:forEach> </table> </div> </td> </tr> </c:forEach> </tbody> </table> </div> <div class="pageDiv"> <%@include file="../include/admin/adminPage.jsp" %> </div> </div> <%@include file="../include/admin/adminFooter.jsp"%> ``` # 步驟 11: 查詢功能講解 訪問地址: http://127.0.0.1:8080/tmall_j2ee/admin\_order\_list 即可看到訂單查詢界面。 admin\_order\_list 導致OrderServlet.list()方法被調用 1\. 分頁查詢訂單信息 2\. 借助orderItemDAO.fill()方法為這些訂單填充上orderItems信息 3\. 服務端跳轉到admin/listOrder.jsp頁面 4\. 在listOrder.jsp借助c:forEach把訂單集合遍歷出來 5\. 遍歷訂單的時候,再把當前訂單的orderItem訂單項集合遍歷出來 OrderServlet ``` public String list(HttpServletRequest request, HttpServletResponse response, Page page) { List<Order> os = DaoUtil.orderDao.list(page.getStart(), page.getCount()); DaoUtil.orderItemDAO.fill(os); int total = DaoUtil.orderDao.getTotal(); page.setTotal(total); request.setAttribute("os", os); request.setAttribute("page", page); return "admin/listOrder.jsp"; } ``` listOrder.jsp ``` <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@include file="../include/admin/adminHeader.jsp"%> <%@include file="../include/admin/adminNavigator.jsp"%> <script> $(function(){ $("button.orderPageCheckOrderItems").click(function(){ var oid = $(this).attr("oid"); $("tr.orderPageOrderItemTR[oid="+oid+"]").toggle(); }); }); </script> <title>訂單管理</title> <div class="workingArea"> <h1 class="label label-info" >訂單管理</h1> <br> <br> <div class="listDataTableDiv"> <table class="table table-striped table-bordered table-hover1 table-condensed"> <thead> <tr class="success"> <th>ID</th> <th>狀態</th> <th>金額</th> <th width="100px">商品數量</th> <th width="100px">買家名稱</th> <th>創建時間</th> <th>支付時間</th> <th>發貨時間</th> <th>確認收貨時間</th> <th width="120px">操作</th> </tr> </thead> <tbody> <c:forEach items="${os}" var="o"> <tr> <td>${o.id}</td> <td>${o.statusDesc}</td> <td>¥<fmt:formatNumber type="number" value="${o.total}" minFractionDigits="2"/></td> <td align="center">${o.totalNumber}</td> <td align="center">${o.user.name}</td> <td><fmt:formatDate value="${o.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/></td> <td><fmt:formatDate value="${o.payDate}" pattern="yyyy-MM-dd HH:mm:ss"/></td> <td><fmt:formatDate value="${o.deliveryDate}" pattern="yyyy-MM-dd HH:mm:ss"/></td> <td><fmt:formatDate value="${o.confirmDate}" pattern="yyyy-MM-dd HH:mm:ss"/></td> <td> <button oid=${o.id} class="orderPageCheckOrderItems btn btn-primary btn-xs">查看詳情</button> <c:if test="${o.status=='waitDelivery'}"> <a href="admin_order_delivery?id=${o.id}"> <button class="btn btn-primary btn-xs">發貨</button> </a> </c:if> </td> </tr> <tr class="orderPageOrderItemTR" oid=${o.id}> <td colspan="10" align="center"> <div class="orderPageOrderItem"> <table width="800px" align="center" class="orderPageOrderItemTable"> <c:forEach items="${o.orderItems}" var="oi"> <tr> <td align="left"> <img width="40px" height="40px" src="img/productSingle/${oi.product.firstProductImage.id}.jpg"> </td> <td> <a href="foreproduct?pid=${oi.product.id}"> <span>${oi.product.name}</span> </a> </td> <td align="right"> <span class="text-muted">${oi.number}個</span> </td> <td align="right"> <span class="text-muted">單價:¥${oi.product.promotePrice}</span> </td> </tr> </c:forEach> </table> </div> </td> </tr> </c:forEach> </tbody> </table> </div> <div class="pageDiv"> <%@include file="../include/admin/adminPage.jsp" %> </div> </div> <%@include file="../include/admin/adminFooter.jsp"%> ``` # 步驟 12: 發貨功能講解 當訂單狀態是waitDelivery的時候,就會出現發貨按鈕 1\. 發貨按鈕鏈接跳轉到admin\_order\_delivery 2\. OrderServlet.delivery()方法被調用 2.1 根據id獲取Order對象 2.2 修改發貨時間,設置發貨狀態 2.3 更新到數據庫 2.4 客戶端跳轉到admin\_order\_list頁面 ``` public String delivery(HttpServletRequest request, HttpServletResponse response) { int id = Integer.parseInt(request.getParameter("id")); Order o = DaoUtil.orderDao.get(id); o.setDeliveryDate(new Date()); o.setStatus(OrderDao.waitConfirm); DaoUtil.orderDao.update(o); return "@admin_order_list"; } ``` # 步驟 13 : 增加,修改,刪除功能 訂單的增加和刪除功能交由前臺完成,后臺不提供
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看