<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    鷹翔宇空

    學習和生活

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      110 Posts :: 141 Stories :: 315 Comments :: 1 Trackbacks

    做web時,經常要面對分頁這一問題,我也不知道究竟哪一種最好,就把想到的列出來:
    第一種:先把所有數據都從服務器端獲取到客戶端,然后在web端進行分頁處理。但是對于一些很大數據量的列表,無疑效率很低的,用戶要等上好久才能見到效果(即使你用AJAX,它只能是用戶避免見到空白頁);但這種做法減少了和服務器的交互。
    第二種:就是通過條件控制,web端僅獲取一頁的數據量,它提高了訪問服務器的效率,速度比較快,但是加大了訪問服務器的頻率。
    我們用的比較多的是第二種。但還有一個問題,分頁的時候,要知道總共的頁數,有兩種做法:
      第一種:在web端調用兩次服務端,一次獲取當前頁的數據,再一次獲取總共的頁數等信息。
      第二種:在服務端包裝數據列表和總共的頁數信息,返回的僅是一個對象,然后到web端進行拆解。
    比方說,用一個VO存放List和totalPage,可以把totalPage存放在另一個VO中,以便于以后的擴展。

    不同的數據庫有不同的專業分頁語句。我們最常用的是oracle(參考hibernate):

    public String getLimitString(String sql) {
      StringBuffer pagingSelect = new StringBuffer(100);
      pagingSelect.append("select * from ( select row_.*, rownum rownum_ from ( ");
      pagingSelect.append(sql);
      pagingSelect.append(" ) row_ where rownum <= ?) where rownum_ > ?");
      return pagingSelect.toString();
    }

    MySql中的:

    public String getLimitString(String sql) {
      StringBuffer pagingSelect = new StringBuffer(100);
      pagingSelect.append(sql);
      pagingSelect.append(" limit ?, ?");
      return pagingSelect.toString();
    }

    下面是jsp中的一些分頁代碼(采用第二種):

    <script language="JavaScript">
    //實現分頁功能 示例
    //  function forwardpage(page)
    //    {
    //        window.location="<!--%=request.getContextPath()%-->/.do?op=&cp="+page;//    }
        function selectPage(){
          var thePage = document.all("spage").value;
          if(thePage<1){
            alert("請選擇一頁!");
          }else{
            turnToPage(thePage);
          }
        }
    </script>
     <%
         String totalPage = (String) request.getAttribute("totalPage");
         String currentNum = request.getParameter("cp");
         int cp = 0;
         int pageNum = 0;
         if(totalPage==null||totalPage.equals("")){
           totalPage = "10";
         }
         pageNum = Integer.parseInt(totalPage);
         if(currentNum == null || currentNum.trim().equals("")){
           cp = 1;
         }else{
           cp = Integer.parseInt(currentNum);
         }
         currentNum = null;
         totalPage = null;
    %>

    <table width="100%" border="0">
       <tr>
          <td>共<%=pageNum%>頁</td>
          <td></td>
      <% if(cp == 1){ %>
          <td  width="30" align="center" align="center"><IMG alt=第一頁
                                src="<%=request.getContextPath()%/public/images/splitpage/unfirstpg.gif"></td>

          <td  width="20" align="center"><IMG
                                alt=上一頁 src="<%=request.getContextPath()%>/public/images/splitpage/unpreviouspg.gif">
          </td>
      <%
        }
        else
        {
      %>
          <td  width="20" align="center"><IMG alt=第一頁
                                src="<%=request.getContextPath()%>/public/images/splitpage/firstpg.gif" onclick="forwardpage('1')" style="cursor:hand"></td>

          <td width="20" align="center"><IMG
                                alt=上一頁 src="<%=request.getContextPath()%>/public/images/splitpage/previouspg.gif" onclick="forwardpage('<%=cp-1%>')" style="cursor:hand">
          </td>
       <%
        }

        if(cp == pageNum){
      %>

          <td  width="20" align="right"><IMG  alt=下一頁
                                src="<%=request.getContextPath()%>/public/images/splitpage/unnextpg.gif">
          </td>

          <td  width="20" align="right"><IMG  alt=最后一頁
                                src="<%=request.getContextPath()%>/public/images/splitpage/unlastpg.gif"></td>

      <% }
         else{
      %>

          <td width="20" align="right"><IMG  alt=下一頁
                                src="<%=request.getContextPath()%>/public/images/splitpage/nextpg.gif" onclick="forwardpage('<%=cp+1%>')" style="cursor:hand">
          </td>

          <td class="redbutton" width="20" align="right"><IMG  alt=最后一頁
                                src="<%=request.getContextPath()%>/public/images/splitpage/lastpg.gif" onclick="forwardpage('<%=pageNum%>')" style="cursor:hand"></td>

      <%   }   %>

          <td  width="20">&nbsp;</td>
          <td>跳轉到<select name="spage" onchange="selectPage()"><%
             for(int pi=1;pi<=pageNum;pi++){
               %>
               <option value="<%=pi%>"><%=pi%></option>
               <%
             }
          %></select>頁</td>
       </tr>
    </table>

    posted on 2006-02-14 09:11 TrampEagle 閱讀(1374) 評論(2)  編輯  收藏 所屬分類: 學習體會

    Feedback

    # re: 關于分頁設計的一些做法 2006-02-15 09:50 深藍色心情
    繼續努力,快入點門了,恩。  回復  更多評論
      

    # re: 關于分頁設計的一些做法 2006-02-15 14:10 TrampEagle
    TO: 深藍色心情
    深藍色心情兄,有什么好的建議可以提出來啊,大家(至少我本人)會好好學習的,呵呵呵。不過仍然感謝你的鼓勵!

    另:如果大家有什么好的想法一定要提出來啊,不勝感激!即使沒有什么特別好的,也可以把自己的看法寫出來,同樣感激!
      回復  更多評論
      

    主站蜘蛛池模板: 四虎影永久在线高清免费| 亚洲AV无码一区二区三区DV| 国产亚洲情侣久久精品| 亚洲日韩aⅴ在线视频| 很黄很黄的网站免费的| 国产精品亚洲精品爽爽| 亚洲va在线va天堂va不卡下载| 国产亚洲一区区二区在线| 99re在线精品视频免费| 亚洲欧洲无码一区二区三区| 国产亚洲精品自在久久| 亚洲免费闲人蜜桃| 羞羞网站在线免费观看| 亚洲精品国产啊女成拍色拍| 亚洲国产成人精品久久久国产成人一区二区三区综 | 免费又黄又爽的视频| 国产精品免费大片| 亚洲国产成人AV在线播放 | 亚洲第一成年男人的天堂| 国产成人福利免费视频| 精精国产www视频在线观看免费| 亚洲福利精品电影在线观看| 8x8x华人永久免费视频| 乱人伦中文视频在线观看免费| 亚洲区精品久久一区二区三区| 久爱免费观看在线网站| 精品久久久久久亚洲综合网| 亚洲精品**中文毛片| 国产亚洲精品福利在线无卡一 | 视频一区二区三区免费观看| 亚洲av中文无码乱人伦在线r▽ | 国产乱妇高清无乱码免费| 亚洲www在线观看| 中文字幕人成无码免费视频| www免费黄色网| 亚洲av无码专区国产不乱码| 亚洲人成日本在线观看| 亚洲人成在线影院| 亚洲永久精品ww47| 亚洲精品456播放| 五月婷婷亚洲综合|