posts - 10, comments - 9, trackbacks - 0, articles - 17

          在MVC中實現的分頁。

          Posted on 2008-11-27 13:34 wesley1987 閱讀(805) 評論(1)  編輯  收藏 所屬分類: struts學習項目

          1.。JSP頁面中:

          ////////////數據顯示///////////////////////
          顯示 從數據庫查出的,放在 list<offer> 中的數據。

          <c:forEach items="${requestScope.list}" var="offer">
              
          <tr>
                
          <td height="25">${offer.offername}</td>
                
          <td height="25">${offer.offeradd}</td>
                
          <td height="25">${offer.tel}</td>
                
          <td height="25">${offer.connecter}</td>
                
          <td height="25">${offer.bank}</td>
                
          <td height="25">${offer.account}</td>
                
          <td height="25">${offer.post}</td>
                
          <td height="25" onclick="showComment(${offer.offerId})"><p id="getshow${offer.offerId}"> 查看備注 </p><p id=${offer.offerId} style="display:none">${offer.comment}</p></td>
                
          <td height="25"><a href="">修改</a></td>
                
          <td height="25"><a onclick="deleteCheck('${offer.offername}')">刪除</a></td>
                 
          </tr></c:forEach>
                
          <script>
                  function showComment(sid)
          {
                               
          if(document.getElementById(sid).style.display=="none"){
                                       document.getElementById(sid).style.display
          ="inline";
                                       document.getElementById(
          "getshow"+sid).style.display="none";}
           
                               
          else {
                                       document.getElementById(sid).style.display
          ="none";
                                       document.getElementById(
          "getshow"+sid).style.display="inline";}


                      }


                    function deleteCheck(offername)
          {
                                   var name
          =offername;
                             
          if(confirm("確認刪除供應商 :"+name+" ?"))
                                      window.location
          ="<%=path%>/service/message.jsp?message=needtochange";
                                     
          return;
                    }
          </script>

          ////////
          ///////////分頁選擇單    //////////////////////
          參數說明    每次顯示 5個頁面連接,按 '<'  '>'  則顯示上/下5個頁面:
           pagePart 以5頁面為以part。從1開始
           currPage 當前頁數
          pageCount 總頁數

           1<div class=digg align="right">
           2     <c:choose>
           3              <c:when test="${requestScope.pagePart>1}">
           4                      <a href="<%=path%>/offerSearch.do?offername=${requestScope.offername}&page=${requestScope.pagePart*5-5}">&lt; </a>&nbsp;&nbsp;  
           5              </c:when>
           6               <c:otherwise>
           7                           <span class=disabled>&lt;</span>
           8               </c:otherwise>
           9          </c:choose>
          10
          11  <c:forEach begin="${(requestScope.pagePart*5-4)>0?requestScope.pagePart*5-4:1}" end="${requestScope.pagePart*5<requestScope.pageCount?requestScope.pagePart*5:requestScope.pageCount}" var="page">
          12        <c:choose>
          13             <c:when test="${requestScope.currPage==page}"><span class=current>${page}</span></c:when>
          14            <c:otherwise><a href="<%=path%>/offerSearch.do?offername=${requestScope.offername}&page=${page}">${page}</a></c:otherwise>
          15        </c:choose>
          16  </c:forEach>
          17  
          18  <c:choose>
          19          <c:when  test="${requestScope.pagePart*5<requestScope.pageCount}">
          20 &nbsp;&nbsp;<a href="<%=path%>/offerSearch.do?offername=${requestScope.offername}&page=${requestScope.pagePart*5+1}"">&gt; </a>
          21          </c:when>
          22          <c:otherwise><span class=disabled>&gt;</span></c:otherwise>
          23  </c:choose><span class=disabled>${requestScope.currPage}/${requestScope.pageCount}</span>
          24</div>
          25
          26
          分頁處用到的CSS
          DIV.digg {
           PADDING-RIGHT
          : 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; MARGIN: 3px; PADDING-TOP: 3px; TEXT-ALIGN: center
          }

          DIV.digg A 
          {
           BORDER-RIGHT
          : #aaaadd 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #aaaadd 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; MARGIN: 2px; BORDER-LEFT: #aaaadd 1px solid; COLOR: #000099; PADDING-TOP: 2px; BORDER-BOTTOM: #aaaadd 1px solid; TEXT-DECORATION: none
          }

          DIV.digg A:hover 
          {
           BORDER-RIGHT
          : #000099 1px solid; BORDER-TOP: #000099 1px solid; BORDER-LEFT: #000099 1px solid; COLOR: #000; BORDER-BOTTOM: #000099 1px solid
          }

          DIV.digg A:active 
          {
           BORDER-RIGHT
          : #000099 1px solid; BORDER-TOP: #000099 1px solid; BORDER-LEFT: #000099 1px solid; COLOR: #000; BORDER-BOTTOM: #000099 1px solid
          }

          DIV.digg SPAN.current 
          {
           BORDER-RIGHT
          : #000099 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #000099 1px solid; PADDING-LEFT: 5px; FONT-WEIGHT: bold; PADDING-BOTTOM: 2px; MARGIN: 2px; BORDER-LEFT: #000099 1px solid; COLOR: #fff; PADDING-TOP: 2px; BORDER-BOTTOM: #000099 1px solid; BACKGROUND-COLOR: #000099
          }

          DIV.digg SPAN.disabled 
          {
           BORDER-RIGHT
          : #eee 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #eee 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; MARGIN: 2px; BORDER-LEFT: #eee 1px solid; COLOR: #ddd; PADDING-TOP: 2px; BORDER-BOTTOM: #eee 1px solid
          }


          2 處理的Action
          public ActionForward execute(ActionMapping mapping, ActionForm form,
                      HttpServletRequest request, HttpServletResponse response) throws Exception 
          {
                  String offername = Model.changeStr(request.getParameter("offername"));
                  request.setAttribute("offername", offername);
                  request.setAttribute("pageCount", OfferSearchModel.getPageCount(offername));
                  
                  if(request.getParameter("page")==null){
                      request.setAttribute("list", OfferSearchModel.getOfferList(offername, 1));        
                      request.setAttribute("pagePart", 1);
                      request.setAttribute("currPage", 1);
                  
          }

                  else
          {
                      int page = Integer.parseInt(request.getParameter("page"));
                      int pagePart = (page-1)/5+1;
                      request.setAttribute("list", OfferSearchModel.getOfferList(offername, page));
                      request.setAttribute("pagePart", pagePart);
                      request.setAttribute("currPage", page);
                  
          }
                  
                  return mapping.findForward("show");
              }

          3 數據庫查詢 (pageSize 每頁顯示條數)
          String sql="select count(*) from offer where offername like '%"+offername+"%'";

          sql = sql+"where offername like '%"+offername+"%' and rownum <="+pageSize
              +"and offerid not in (select offerid from offer where offername like '%"+offername
              +"%' and rownum <="+pageSize*(page-1)+")";            



          后記:第三步的SQL語句 本來是根據top-N的方法得來的,但是在Oracle中使用后發現個錯誤:
          比如取第5頁數據:
          select * from offer where offername like 'offername' and rownum <=10
              
          and offerid not in (select offerid from offer where offername like 'offername' and rownum <=10*(5-1));     
          錯誤原因是 ()中的子查詢 和外面的查詢的排序方式不同!!非常詭異的問題,折騰一下午也沒解決。
          現在實際用的是全取出后,再截取需要數據。雖然這個方法不好,但是可以方便做成公共的接口和實現。

          這個方法的Oracle替換方法 可以考慮用過程函數的游標實現。還有用集合運算中的MINUS相減,算法應該和上面的是一樣的。


          Feedback

          # re: 在MVC中實現的分頁。  回復  更多評論   

          2013-11-25 11:49 by 扯淡
          4223
          主站蜘蛛池模板: 如东县| 综艺| 辽源市| 东城区| 周口市| 名山县| 当阳市| 恩施市| 南溪县| 叙永县| 西吉县| 元氏县| 商城县| 静宁县| 通辽市| 宜宾县| 沙洋县| 永善县| 大港区| 务川| 玛纳斯县| 通渭县| 沅陵县| 荆州市| 沂源县| 松原市| 阿拉善左旗| 游戏| 六盘水市| 沂南县| 依兰县| 大邑县| 和硕县| 百色市| 高清| 辉南县| 永嘉县| 巫山县| 文昌市| 云南省| 兴安县|