• 网上图书商城项目学习笔记-019我的订单


    一、流程分析

    二、代码

    1.view层

    (1)top.jsp

    <a href="<c:url value='/OrderServlet?method=myOrders'/>" target="body">我的传智订单</a>&nbsp;&nbsp;|&nbsp;&nbsp;

    (2)list.jsp

     1 <div class="divMain">
     2     <div class="divTitle">
     3         <span style="margin-left: 150px;margin-right: 280px;">商品信息</span>
     4         <span style="margin-left: 40px;margin-right: 38px;">金额</span>
     5         <span style="margin-left: 50px;margin-right: 40px;">订单状态</span>
     6         <span style="margin-left: 50px;margin-right: 50px;">操作</span>
     7     </div>
     8     <br/>
     9     <table align="center" border="0" width="100%" cellpadding="0" cellspacing="0">
    10 
    11 
    12 <c:forEach items="${pb.beanList }" var="o">
    13 
    14         <tr class="tt">
    15             <td width="320px">订单号:<a  href="<c:url value='/OrderServlet?method=load&oid=${o.oid }'/>">${o.oid }</a></td>
    16             <td width="200px">下单时间:${o.orderTime }</td>
    17             <td>&nbsp;</td>
    18             <td>&nbsp;</td>
    19             <td>&nbsp;</td>
    20             <td>&nbsp;</td>
    21         </tr>
    22         <tr style="padding-top: 10px; padding-bottom: 10px;">
    23             <td colspan="2">
    24 
    25 
    26     <c:forEach items="${o.orderItems }" var="oi">
    27     <a class="link2" href="<c:url value='/BookServlet?method=load&bid=${oi.book.bid }'/>">
    28         <img border="0" width="70" src="<c:url value='/${oi.book.image_b }'/>"/>
    29     </a>
    30     </c:forEach>
    31 
    32 
    33             </td>
    34             <td width="115px">
    35                 <span class="price_t">&yen;${o.total }</span>
    36             </td>
    37             <td width="142px">
    38 <c:choose>
    39     <c:when test="${o.status eq 1 }">(等待付款)</c:when>
    40     <c:when test="${o.status eq 2 }">(准备发货)</c:when>
    41     <c:when test="${o.status eq 3 }">(等待确认)</c:when>
    42     <c:when test="${o.status eq 4 }">(交易成功)</c:when>
    43     <c:when test="${o.status eq 5 }">(已取消)</c:when>
    44 </c:choose>
    45             </td>
    46             <td>
    47             <a href="<c:url value='/OrderServlet?method=load&oid=${o.oid }'/>">查看</a><br/>
    48 <c:if test="${o.status eq 1 }">
    49                 <a href="<c:url value='/OrderServlet?method=load&oid=${o.oid }'/>">支付</a><br/>
    50                 <a href="<c:url value='/OrderServlet?method=load&btn=cancel&oid=${o.oid }'/>">取消</a><br/>                        
    51 </c:if>
    52 <c:if test="${o.status eq 3 }">
    53                 <a href="<c:url value='/OrderServlet?method=load&btn=confirm&oid=${o.oid }'/>">确认收货</a><br/>
    54 </c:if>
    55             </td>
    56         </tr>
    57 </c:forEach>
    58 
    59     </table>
    60     <br/>
    61     <%@include file="/jsps/pager/pager.jsp" %>
    62 </div>

    3.pager.jsp

     1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
     2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
     3 <script type="text/javascript">
     4     function _go() {
     5         var pc = $("#pageCode").val();//获取文本框中的当前页码
     6         if(!/^[1-9]d*$/.test(pc)) {//对当前页码进行整数校验
     7             alert('请输入正确的页码!');
     8             return;
     9         }
    10         if(pc > ${pb.totalPages}) {//判断当前页码是否大于最大页
    11             alert('请输入正确的页码!');
    12             return;
    13         }
    14         location = "${pb.url}&pc=" + pc;
    15     }
    16 </script>
    17 
    18 <div class="divBody">
    19   <div class="divContent">
    20     <%--上一页 --%>
    21 
    22 <c:choose>
    23   <c:when test="${pb.currentPage eq 1 }"><span class="spanBtnDisabled">上一页</span></c:when>
    24   <c:otherwise> <a href="${pb.url }&pb=${pb.currentPage-1}" class="aBtn bold">上一页</a></c:otherwise>
    25 </c:choose>
    26        
    27 <%--我们需要计算页码列表的开始和结束位置,即两个变量begin和end,设定总共显示6页
    28 计算它们需要通过当前页码!
    29 1. 总页数不足6页--> begin=1, end=最大页
    30 2. 总页数大于6页,通过公式设置begin和end,begin=当前页-2,end=当前页+3,因为假定总共显示6页
    31 3. 如果begin<1,那么让begin=1,end=6
    32 4. 如果end>tp, 让begin=tp-5, end=tp
    33  --%>
    34  <c:choose>
    35    <c:when test="${pb.totalPages <= 6 }">
    36      <c:set var="begin" value="1"/>
    37      <c:set var="end" value="${pb.totalPages }"/>
    38    </c:when>
    39    <c:otherwise>
    40      <c:set var="begin" value="${pb.currentPage -2 }"/>
    41      <c:set var="end" value="${pb.currentPage + 3 }"/>
    42      <c:if test="${begin < 1 }">
    43        <c:set var="begin" value="1"/>
    44        <c:set var="end" value="6"/>
    45      </c:if>
    46      <c:if test="${end > pb.totalPages }">
    47        <c:set var="begin" value="${pb.totalPages - 5 }"/>
    48        <c:set var="end" value="${pb.totalPages }"/>
    49      </c:if>
    50    </c:otherwise>
    51  </c:choose>
    52     
    53     <%-- 显示页码列表 --%>
    54     <c:forEach begin="${begin }" end="${end }" var="i">
    55       <c:choose>
    56         <c:when test="${i eq pb.currentPage }"><span class="spanBtnSelect">${i }</span></c:when>
    57         <c:otherwise><a href="${pb.url }&pc=${i}" class="aBtn">${i}</a></c:otherwise>
    58       </c:choose>
    59     </c:forEach>
    60     
    61     <%-- 显示点点点 --%>
    62     <c:if test="${end < pb.totalPages }"><span class="spanApostrophe">...</span> </c:if>
    63     
    64      <%--下一页 --%>
    65      <c:choose>
    66          <c:when test="${pb.currentPage eq pb.totalPages }"><span class="spanBtnDisabled">下一页</span></c:when>
    67          <c:otherwise><a href="${pb.url }&pc=${pb.currentPage+1}" class="aBtn bold">下一页</a> </c:otherwise>
    68      </c:choose>
    69         
    70     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    71     
    72     <%-- 共N页 到M页 --%>
    73     <span>共${pb.totalPages}页</span>
    74     <span>到</span>
    75     <input type="text" class="inputPageCode" id="pageCode" value="${pb.currentPage }"/>
    76     <span>页</span>
    77     <a href="javascript:_go();" class="aSubmit">确定</a>
    78   </div>
    79 </div>

     

    2.servlet层

    (1)OrderServlet.java 

     1     /**
     2      * 我的订单
     3      * @param req
     4      * @param resp
     5      * @return
     6      * @throws ServletException
     7      * @throws IOException
     8      */
     9     public String myOrders(HttpServletRequest req, HttpServletResponse resp)
    10             throws ServletException, IOException {
    11         int pc = getPc(req);
    12         String url = getUrl(req);
    13         User user = (User) req.getSession().getAttribute("sessionUser");
    14         PageBean<Order> pb = service.myOrders(user.getUid(), pc);
    15         pb.setUrl(url);
    16         req.setAttribute("pb", pb);
    17         return "f:/jsps/order/list.jsp";
    18     }
    19 
    20     /**
    21      * 获取当前请求的url
    22      * @param req
    23      * @return
    24      */
    25     private String getUrl(HttpServletRequest req) {
    26         String url = req.getRequestURI() + "?" + req.getQueryString();
    27         /*
    28          * 如果url中存在pc参数,截取掉,如果不存在那就不用截取。
    29          */
    30         int index = url.lastIndexOf("&pc=");
    31         if(index != -1) {
    32             url = url.substring(0, index);
    33         }
    34         return url;
    35     }
    36 
    37     /**
    38      * 获取当前页
    39      * @param req
    40      * @return
    41      */
    42     private int getPc(HttpServletRequest req) {
    43         int pc = 1;
    44         String param = req.getParameter("pc");
    45         if(param != null && !param.trim().isEmpty()) {
    46             try {
    47                 pc = Integer.parseInt(param);
    48             } catch (Exception e) {
    49                 e.printStackTrace();
    50             }
    51         }
    52         return pc;
    53     }

    3.service层

    (1)OrderService.java 

     1     /**
     2      * 我的订单
     3      * @param uid
     4      * @param pc
     5      * @return
     6      */
     7     public PageBean<Order> myOrders(String uid, int pc) {
     8         try {
     9             JdbcUtils.beginTransaction();
    10             PageBean<Order> pb = dao.findByUser(uid, pc);
    11             JdbcUtils.commitTransaction();
    12             return pb;
    13         } catch (SQLException e) {
    14             try {
    15                 JdbcUtils.rollbackTransaction();
    16             } catch (SQLException e1) {
    17                 e1.printStackTrace();
    18             }
    19             throw new RuntimeException(e);
    20         }
    21     }

    4.dao层

    (1)OrderDao.java

      1     /**
      2      * 按用户id查找
      3      * @param uid
      4      * @return
      5      * @throws SQLException 
      6      */
      7     public PageBean<Order> findByUser(String uid, int pc) throws SQLException {
      8         List<Expression> exprList = new ArrayList<Expression>();
      9         exprList.add(new Expression("uid", "=", uid));
     10         return findByCriteria(exprList, pc);
     11     }
     12 
     13     /**
     14      * 按条件查找
     15      * @param exprList
     16      * @return
     17      * @throws SQLException 
     18      */
     19     private PageBean<Order> findByCriteria(List<Expression> exprList, int pc) throws SQLException {
     20         /*
     21          * 1. 得到pageSize
     22          * 2. 得到totalRecords
     23          * 3. 得到beanList
     24          * 4. 创建PageBean,返回
     25          */
     26         // 1. 得到pageSize
     27         int ps = PageConfig.ORDER_PAGE_SIZE;
     28         
     29         // 2. 通过exprList来生成where子句
     30         StringBuilder sb = new StringBuilder(" where 1=1");
     31         List<Object> params = new ArrayList<Object>();
     32         for(Expression expr : exprList) {
     33             sb.append(" and ").append(expr.getName()).append(" ")
     34                 .append(expr.getOperator()).append(" ");
     35             if(!expr.getOperator().equalsIgnoreCase("is null")) {
     36                 sb.append("?");
     37                 params.add(expr.getValue());
     38             }
     39         }
     40         
     41         // 3. 总记录数 
     42         String sql = "select count(*) from t_order" + sb;
     43         Number number = (Number)qr.query(sql, new ScalarHandler(), params.toArray());
     44         int tr = number.intValue();
     45         
     46         // 4. 得到beanList,即当前页记录
     47         sql = "select * from t_order" + sb + " order by ordertime desc limit ?,?";
     48         params.add((pc - 1) * ps);//当前页首行记录的下标
     49         params.add(ps);
     50         
     51         List<Order> beanList = qr.query(sql, new BeanListHandler<Order>(Order.class), params.toArray());
     52         // 虽然已经获取所有的订单,但每个订单中并没有订单条目。
     53         // 遍历每个订单,为其加载它的所有订单条目
     54         for(Order order : beanList) {
     55             loadOrderItem(order);
     56         }
     57         
     58         // 5. 创建PageBean,设置参数
     59         PageBean<Order> pb = new PageBean<Order>();
     60         pb.setBeanList(beanList);
     61         pb.setCurrentPage(pc);
     62         pb.setPageSize(ps);
     63         pb.setTotalRecords(tr);
     64         return pb;
     65     }
     66 
     67     /*
     68      * 为指定的order载它的所有OrderItem
     69      */
     70     private void loadOrderItem(Order order) throws SQLException {
     71         String sql = "select * from t_orderItem where oid=?";//t_orderItem已经包含book表的一些字段
     72         List<Map<String,Object>> mapList = qr.query(sql, new MapListHandler(), order.getOid());
     73         List<OrderItem> orderItems = toOrderItemList(mapList);
     74         order.setOrderItems(orderItems);
     75     }
     76 
     77     /**
     78      * 把多个Map转换成多个OrderItem
     79      * @param mapList
     80      * @return
     81      */
     82     private List<OrderItem> toOrderItemList(List<Map<String, Object>> mapList) {
     83         List<OrderItem> items = new ArrayList<OrderItem>();
     84         OrderItem item = null;
     85         for(Map<String,Object> map : mapList) {
     86             item = toOrderItem(map);
     87             items.add(item);
     88         }
     89         return items;
     90     }
     91 
     92     /*
     93      * 把一个Map转换成一个OrderItem
     94      */
     95     private OrderItem toOrderItem(Map map) {
     96         OrderItem item = CommonUtils.toBean(map, OrderItem.class);
     97         Book book = CommonUtils.toBean(map, Book.class);
     98         item.setBook(book);
     99         return item;
    100     }
  • 相关阅读:
    操作系统学习笔记:银行家算法的回顾和训练
    操作系统学习笔记:内存学习随笔
    操作系统笔记:内存的连续管理
    操作系统笔记:内存的离散管理
    操作系统:内存管理复习ing之页面置换算法
    马原学习日记1:实践
    bootstrap简单教程
    css-6(媒体识别)
    css-5(弹性盒子)
    css-3(旋转+过渡)
  • 原文地址:https://www.cnblogs.com/shamgod/p/5171222.html
Copyright © 2020-2023  润新知