像一顆晨土

          常用鏈接

          統(tǒng)計

          blogs

          life

          最新評論

          pager-taglib 體驗

          ??????可能是自已習慣了用自已的分頁組件。一直不知道有這樣一個現(xiàn)成的分頁標簽。直到那天,白衣跟我提起了一下,我Search了一下,發(fā)現(xiàn)了Pager-taglib這個東東。支持多種風格的分頁顯示。
          ?????? 先簡單介紹一下Pager-taglib。實際上,她是一個Jsp標簽庫,為在JSP上顯示分頁信息而設計的一套標簽,通過這些標簽的不同的組合,會形成多種不一樣的分頁頁面,風格各異,她自帶的DEMO就有七種左右的分頁風格,包括Google的分頁風格。而需要訂制自已的風格的分頁頁面也非常簡單。
          ??????接觸的當天、匆匆看了下Demo和文檔,發(fā)現(xiàn)這個很早(2002年最新版一直到現(xiàn)在)就已經(jīng)有的東西,似 乎比較擅長顯示端分頁。如,把所有的數(shù)據(jù)傳到頁面,通過參數(shù)設定頁面大小等,可能得到很完美的分頁效果。
          ??????第二天回家,做了些小動作,把一個頁碼參數(shù)塞進URL里面,讓程序在頁面之下分了頁再把結果傳出來,簡單地實現(xiàn)了服務器的分頁的功能。
          ??????Pager-taglib的文檔很詳盡,我如果有說也只有翻譯的份,要是真的翻譯也就免了,文檔還是挺容易看懂的。于是我開始作了另外一個小Demo,用了原先Demo里面的一個分頁風格(Simple),稍作修改。希望能幫助自已理清脈絡和對朋友們有用:P
          一、模擬業(yè)務類:

          package ?net.jf.ajax.business;

          import ?java.util.ArrayList;
          import ?java.util.List;

          public ? class ?PageManager? {
          ????
          private ? static ?List?names;
          ????
          {
          ????????names?
          = ? new ?ArrayList();
          ????????names.add(
          " black " );
          ????????names.add(
          " black " );
          ????????names.add(
          " black " );
          ????????names.add(
          " black " );
          ????????names.add(
          " blue " );
          ????????names.add(
          " blue " );
          ????????names.add(
          " blue " );
          ????????names.add(
          " blue " );
          ????????names.add(
          " blue " );
          ????????names.add(
          " red " );
          ????????names.add(
          " yellow " );
          ????????names.add(
          " blue " );
          ????????names.add(
          " green " );
          ????????names.add(
          " blue " );
          ????????names.add(
          " black " );
          ????????names.add(
          " green " );
          ????????names.add(
          " black " );
          ????}

          ????
          /**
          ?????*?查詢函數(shù)
          ?????*?
          @param ?pageNum?頁碼
          ?????*?
          @param ?pageSize?頁大小
          ?????*?
          @param ?condition?查詢條件
          ?????*?
          */

          ????
          public ?List?query( int ?pageNum, int ?pageSize,String?condition) {
          ????????List?tmpNames?
          = ?getNames(condition);
          ????????List?ret?
          = ? new ?ArrayList();
          ????????
          int ?start? = ?(pageNum? - ? 1 )? * ?pageSize;
          ????????
          int ?end? = ?start? + ?pageSize? - ? 1 ;
          ????????
          if (start? >= ?tmpNames.size())
          ????????????
          return ?ret;
          ????????
          for ( int ?i? = ? 0 ;?i? < ?tmpNames.size();?i? ++ ) {
          ????????????
          if (i? >= ?start? && ?i? <= ?end)
          ????????????????ret.add(tmpNames.get(i));
          ????????}

          ????????
          return ?ret;
          ????}

          ????
          /**
          ?????*?按條件查詢所有名字
          ?????*?
          */

          ????
          private ?List?getNames(String?condition)? {
          ????????
          if ( null ? == ?condition)? return ?names;
          ????????List?ret?
          = ? new ?ArrayList();
          ????????
          ????????
          for ( int ?i? = ? 0 ;?i? < ?names.size();?i? ++ ) {
          ????????????
          if (condition.equals(names.get(i)))
          ????????????????ret.add(names.get(i));
          ????????}

          ????????
          return ?ret;
          ????}

          ????
          /**
          ?????*?獲得條件指定的名字的數(shù)量
          ?????*?
          */

          ????
          public ? int ?getSize(String?condition) {
          ????????????
          return ?getNames(condition).size();
          ????}

          }

          二、JSP代碼:
          本頁面提供了列表、查找功能。目的在于演示在Pager-taglib里面如何傳遞參數(shù)(如Form的Post后URL是找不到參數(shù)的,但是要保持原來的查詢條件必須把這些參數(shù)在分頁的時候加到URL上去)。

          <% @?page?language = " java " ? import = " java.util.* " ?pageEncoding = " UTF-8 " %>
          <% @?taglib?uri = " http://jsptags.com/tags/navigation/pager " ?prefix = " pg " ? %>
          <%
          request.setCharacterEncoding(
          " UTF-8 " );
          %>
          < jsp:useBean?id? = ? " pm " ?scope = " page " ? class = " net.jf.ajax.business.PageManager " />
          <! DOCTYPE?HTML?PUBLIC? " -//W3C//DTD?HTML?4.01?Transitional//EN " >
          < html >
          ??
          < head >
          ??
          </ head >
          ??
          ??
          < body >
          ????
          < form?name = " cc " ?action = " pager.jsp " ?method = " post " >
          ????????
          < input?type = " text " ?name = " name " ?value = " <%=request.getParameter( " name " )%> " />< input?type = " submit " ?value = " search " />
          ????
          </ form >
          ????
          < pg:pager
          ????items
          = " <%=?pm.getSize(request.getParameter( " name " ))?%> "
          ????index
          = " center "
          ????maxPageItems
          = " 5 "
          ????maxIndexPages
          = " 5 "
          ????isOffset
          = " <%=?false?%> "
          ????export
          = " pageOffset,currentPageNumber=pageNumber "
          ????scope
          = " request " >
          ????
          <%
          ????
          int ?pageNum? = ? 1 ;
          ????
          if (request.getParameter( " pageNo " )? != ? null )
          ????????pageNum?
          = ?Integer.valueOf(request.getParameter( " pageNo " ));
          ????
          int ?pageSize? = ? 5 ;
          ??????List?result?
          = ?pm.query(pageNum,pageSize,request.getParameter( " name " ));
          ??
          %>
          ????
          < table >
          ????????
          < tr >
          ????????????
          < td > result </ td >
          ????????
          </ tr >
          ????????
          <% for ( int ?i? = ? 0 ;?i? < ?result.size();?i? ++ ) { %>
          ????????
          < tr >
          ????????????
          < td >
          ????????????????
          <%= result.get(i) %>
          ????????????
          </ td >
          ????????
          </ tr >
          ????????
          <% }
          %>
          ????
          </ table >
          ????
          ????
          < pg:param?name = " name " />
          ????
          < pg:index >
          ????????
          < jsp:include?page = " /pagination/jsptags.jsp " ?flush = " true " />
          ????
          </ pg:index >
          ????
          </ pg:pager >
          ??
          </ body >
          </ html >


          從頁面里可以看到,這里使用了三個標簽

          1、<pg:pager>,在這個標簽庫里就充當著一個領袖的作用,一切子標簽都在它里面工作。就以上出現(xiàn)的參數(shù)進行解釋一下:
          items:數(shù)據(jù)的紀錄數(shù)
          index:說起來比較麻煩,反正是一次大跳躍之后,當前頁面在各個頁數(shù)的什么位置,默認為Center,不動也罷了。
          maxPageItems:顯示最多的紀錄數(shù)/頁
          maxIndexPages:顯示最多的分頁數(shù)/次,如設為5的話,則會出現(xiàn)這樣的情況 1 2 3 4 5 .或 3 4 5 6 7 這樣的形式,其實她自帶的DEMO都喜歡把頁數(shù)展現(xiàn)出來排成一排。
          isOffset:與pg:item配套使用,頁pg:item基本上被我淘汰出局。
          export:這個屬性比較重要,文檔也對此作好相對長篇幅的說明。這個屬性是讓標簽給你暴露什么變量,當然這些變量是有選擇的,如在Pager標簽里,可以暴露出來的變量有pageOffset及pageNumber,即頁碼偏移量及頁碼。通過這兩個變量名,可以在Jsp或Java里面從Request里獲得。Export屬性接受的值還有表達式,如currentPage=pageNumber表示,把pageNumber的值暴露出來,并賦給一個叫CurrentPage的變量,這個變量將被保存到Request中,在Jsp或Java中可以得到。
          scope:咳。還需要講么?

          2、<pg:param>這個標簽很有用,用來設置將要加入到URL的變量。使用Name屬性指定即可。

          3、<pg:index>這個標簽說明分頁顯示開始了。跳進我們Include的頁面。再看看詳細的情況。

          三、分頁顯示頁面

          <% @?page?session = " false " ?contentType = " text/html;charset=utf-8 " %>
          <% @?taglib?uri = " http://jsptags.com/tags/navigation/pager " ?prefix = " pg " ? %>
          < pg:first >
          ??
          < a?href = " <%=?pageUrl?%>&pageNo=<%=?pageNumber?%> " >< nobr > [?# <%= ?pageNumber? %> ?首頁?] </ nobr ></ a >
          </ pg:first >
          < pg:skip?pages = " <%=?-5?%> " >
          ??
          < a?href = " <%=?pageUrl?%>&pageNo=<%=?pageNumber?%> " >< nobr > [?# <%= ?pageNumber? %> ?后退?] </ nobr ></ a >
          </ pg:skip >
          < pg:prev >
          ??
          < a?href = " <%=?pageUrl?%>&pageNo=<%=?pageNumber?%> " >< nobr > [?# <%= ?pageNumber? %> ?前一頁?] </ nobr ></ a >
          </ pg:prev >
          < pg:pages >
          ???
          < a?href = " <%=?pageUrl?%>&pageNo=<%=?pageNumber?%> " ><%= ?pageNumber? %></ a > ?
          </ pg:pages >
          < pg:next >
          ??
          < a?href = " <%=?pageUrl?%>&pageNo=<%=?pageNumber?%> " >< nobr > [?下一頁?# <%= ?pageNumber? %> ?] </ nobr ></ a >
          </ pg:next >
          < pg:skip?pages = " <%=?5?%> " >
          ??
          < a?href = " <%=?pageUrl?%>&pageNo=<%=?pageNumber?%> " >< nobr > [?跳進?# <%= ?pageNumber? %> ?] </ nobr ></ a >
          </ pg:skip >
          < pg:last >
          ??
          < a?href = " <%=?pageUrl?%>&pageNo=<%=?pageNumber?%> " >< nobr > [?尾頁?# <%= ?pageNumber? %> ?] </ nobr ></ a >
          </ pg:last >


          沒錯,你看到的這些標簽都是導航標簽。很容易明白,用法基本上一致,從標簽的名字上就能看出是什么作用。告訴你我動了手腳的地方就是我在每一個PageUrl后面都加了&pageNo=<%= pageNumber %>。讓我們的URL帶上頁碼的參數(shù),這樣程序可以拿到頁碼去查找所需要的數(shù)據(jù)。

          結果很理想。在SpringSide領了個分頁標簽的任務,原來還想著自已實現(xiàn)一套標簽的。還好被白衣喝住了。。卡卡。摸清楚了整套標簽的使用方法后,很容易就可以把一些重復的東西再稍作封裝,變成有“特色”的東西。幸虧沒有重復發(fā)明輪子(臉紅啊,還發(fā)明呢~~~)。

          ???????天色已早。這幾天再繼續(xù)研究和“拿來”。有經(jīng)驗再一起交流。。


          參考資料:
          http://jsptags.com/tags/navigation/pager/index.jsp?Pager-taglibs官網(wǎng)
          http://www.springside.org.cn/?SpringSide 春天的旁邊(需要我們的參與)

          posted on 2006-06-27 02:22 艾塵 閱讀(6147) 評論(7)  編輯  收藏 所屬分類: pick up

          評論

          # re: pager-taglib 體驗 2006-09-18 13:15 賭東道事實

          < a href = " <%= pageUrl %>&pageNo=<%= pageNumber %> " ><%= pageNumber %></ a >

          如果我用的是控制器(比如說控制器請求地址是:test.shtml),pageUrl 應該怎么寫???  回復  更多評論   

          # re: pager-taglib 體驗 2006-09-23 18:21 fsd

          @賭東道事實
          fd  回復  更多評論   

          # re: pager-taglib 體驗[未登錄] 2007-01-18 21:47 Luke

          看了你的介紹覺得很好,但是運行你的代碼,沒運行出來,如果方便的話希望能寫一個完整的例子(代碼)出來,如果可以的話希望能發(fā)到我的郵箱ln1058@163.com
          謝了!  回復  更多評論   

          # re: pager-taglib 體驗 2007-02-10 21:24 事實

          真的很垃圾,在jsp頁面中怎么能用<%%>著玩意兒  回復  更多評論   

          # re: pager-taglib 體驗 2007-02-10 21:28 事實

          我希望jsp只作為view,不要有一切邏輯;筆者能給出ExtremeTable(數(shù)據(jù)呈現(xiàn))+Pager-taglib(分頁呈現(xiàn))的解決方案嗎?  回復  更多評論   

          # re: pager-taglib 體驗 2007-02-10 21:30 事實

          分頁數(shù)據(jù)在dao層進行,將得到的數(shù)據(jù)給ExtremeTable(數(shù)據(jù)呈現(xiàn))+Pager-taglib(分頁呈現(xiàn))呈現(xiàn)  回復  更多評論   

          # re: pager-taglib 體驗 2008-10-31 15:43 machey

          pager.offset這個參數(shù)能否變換,考慮一下如何變換  回復  更多評論   

          主站蜘蛛池模板: 历史| 拉萨市| 延长县| 乌鲁木齐县| 栾城县| 长沙县| 扶绥县| 延庆县| 红桥区| 张家川| 顺义区| 丰宁| 简阳市| 大竹县| 衡山县| 通许县| 柘荣县| 本溪市| 尼勒克县| 高要市| 抚松县| 南投县| 新邵县| 墨竹工卡县| 荥阳市| 乌兰察布市| 会理县| 阳原县| 沙洋县| 搜索| 瑞安市| 祥云县| 泌阳县| 博乐市| 永春县| 香河县| 嘉禾县| 托里县| 陇南市| 东乌| 垣曲县|