可能是自已习惯了用自已的分页组件。一直不知道有这样一个现成的分页标签。直到那天,白衣跟我提起了一下,我Search了一下,发现了Pager-taglib这个东东。支持多种风格的分页显示。
先简单介绍一下Pager-taglib。实际上,她是一个Jsp标签库,为在JSP上显示分页信息而设计的一套标签,通过这些标签的不同的组合,会形成 多种不一样的分页页面,风格各异,她自带的DEMO就有七种左右的分页风格,包括Google的分页风格。而需要订制自已的风格的分页页面也非常简单。
接触的当天、匆匆看了下Demo和文档,发现这个很早(2002年最新版一直到现在)就已经有的东西,似 乎比较擅长显示端分页。如,把所有的数据传到页面,通过参数设定页面大小等,可能得到很完美的分页效果。
第二天回家,做了些小动作,把一个页码参数塞进URL里面,让程序在页面之下分了页再把结果传出来,简单地实现了服务器的分页的功能。
Pager-taglib的文档很详尽,我如果有说也只有翻译的份,要是真的翻译也就免了,文档还是挺容易看懂的。于是我开始作了另外一个小Demo,用了原先Demo里面的一个分页风格(Simple),稍作修改。希望能帮助自已理清脉络和对朋友们有用:P
一、模拟业务类:
二、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 春天的旁边(需要我们的参与)