鷹翔宇空

          學習和生活

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

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

          不同的數(shù)據(jù)庫有不同的專業(yè)分頁語句。我們最常用的是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">
          //實現(xiàn)分頁功能 示例
          //  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>跳轉(zhuǎn)到<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 閱讀(1377) 評論(2)  編輯  收藏 所屬分類: 學習體會

          Feedback

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

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

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

          主站蜘蛛池模板: 黎城县| 易门县| 田阳县| 余庆县| 凤阳县| 黄陵县| 敖汉旗| 桐城市| 明溪县| 鄄城县| 廉江市| 富裕县| 渭南市| 潍坊市| 准格尔旗| 昌黎县| 青川县| 景宁| 肃北| 东阳市| 遂溪县| 应用必备| 西充县| 洛浦县| 清水河县| 宁南县| 兰坪| 门头沟区| 佳木斯市| 报价| 襄汾县| 弋阳县| 浦城县| 罗定市| 含山县| 富裕县| 沧源| 屯昌县| 通山县| 肥西县| 乐亭县|