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、<pg:pager>,在这个标签库里就充当着一个领袖的作用,一切子标签都在它里面工作。就以上出现的参数进行解释一下:
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、<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带上页码的参数,这样程序可以拿到页码去查找所需要的数据。
结果很理想。在SpringSide领了个分页标签的任务,原来还想着自已实现一套标签的。还好被白衣喝住了。。卡卡。摸清楚了整套标签的使用方法后,很容易就可以把一些重复的东西再稍作封装,变成有“特色”的东西。幸亏没有重复发明轮子(脸红啊,还发明呢~~~)。
天色已早。这几天再继续研究和“拿来”。有经验再一起交流。。
参考资料:
http://jsptags.com/tags/navigation/pager/index.jsp Pager-taglibs官网
http://www.springside.org.cn/ SpringSide 春天的旁边(需要我们的参与)
评论
我也等着用呢
谢谢!!!!
还能 有简单的啊
发表评论
- 浏览: 78807 次

- 详细资料
搜索本博客
最近加入圈子
链接
最新评论
-
Jmesa系列(三)开始使用 ...
也不算就很长了, WebContext webContext = new H ...
-- by spiritfrog -
介绍ExtremeTable的下一代 ...
不好意思,刚没注意有个附件就是demo的。
-- by spiritfrog -
介绍ExtremeTable的下一代 ...
感觉对jmesa的宣传还不够, 到了今天我才知道。一直用displaytag的, ...
-- by spiritfrog -
pager-taglib 体验
还能提供简单的 我也等着用呢 谢谢!!!!
-- by weirihai -
pager-taglib 体验
代码都挺复杂的 还能 有简单的啊
-- by weirihai






评论排行榜