pager-taglib 體驗

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

    
/** */ /**
     * 查詢函數
     * 
@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;
    }

    
/** */ /**
     * 獲得條件指定的名字的數量
     * 
*/

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

}

二、JSP代碼:
本頁面提供了列表、查找功能。目的在於演示在Pager-taglib裏面如何傳遞參數(如Form的Post後URL是找不到參數的,但是要保持原來的查詢條件必須把這些參數在分頁的時候加到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、 ,在這個標籤庫裏就充當着一個領袖的作用,一切子標籤都在它裏面工作。就以上出現的參數進行解釋一下:
items:數據的紀錄數
index:說起來比較麻煩,反正是一次大跳躍之後,當前頁面在各個頁數的什麼位置,默認爲Center,不動也罷了。
maxPageItems:顯示最多的紀錄數/頁
maxIndexPages:顯示最多的分頁數/次,如設爲5的話,則會出現這樣的情況 1 2 3 4 5 .或 3 4 5 6 7 這樣的形式,其實她自帶的DEMO都喜歡把頁數展現出來排成一排。
isOffset:與pg:item配套使用,頁pg:item基本上被我淘汰出局。
export: 這個屬性比較重要,文檔也對此作好相對長篇幅的說明。這個屬性是讓標籤給你暴露什麼變量,當然這些變量是有選擇的,如在Pager標籤裏,可以暴露出來的 變量有pageOffset及pageNumber,即頁碼偏移量及頁碼。通過這兩個變量名,可以在Jsp或Java裏面從Request裏獲得。 Export屬性接受的值還有表達式,如currentPage=pageNumber表示,把pageNumber的值暴露出來,並賦給一個叫 CurrentPage的變量,這個變量將被保存到Request中,在Jsp或Java中可以得到。
scope:咳。還需要講麼?

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

3、 這個標籤說明分頁顯示開始了。跳進我們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帶上頁碼的參數,這樣程序可以拿到頁碼去查找所需要的數據。

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

       天色已早。這幾天再繼續研究和“拿來”。有經驗再一起交流。。


參考資料:
http://jsptags.com/tags/navigation/pager/index.jsp Pager-taglibs官網
http://www.springside.org.cn/ SpringSide 春天的旁邊(需要我們的參與) 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章