手动编写分页挺好,不过太累。于是在搜索了很多网上开源分页插件后选择pager-taglib-2.0,此分页插件因为用法简单功能强大能快速上手,下面逐步实现快速jsp页面的分页。
整体效果(因为记录比较少,所以只有两页):

第二页:

1.下载pager-taglib-2.0.war
在jsptags.com/tags/navigation/pager/">http://jsptags.com/tags/navigation/pager/上可以看到demo和war包下载,在war中解压出jar包,粘贴入项目的lib文件夹中。

2.在显示的jsp上需要引入
<%@ taglib prefix="pg" uri="http://jsptags.com/tags/navigation/pager" %>
3.建立JSPPageModel模型,用于在jsp页面上返回对象集和总记录数
package com.v.oa.common;
import java.util.List;
public class JSPPageModel {
private int total;
private List list;
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
}
4.建立SystemContext类,将系统启动时显示起始记录数和每页显示行数设置在ThreadLocal中。
package com.v.oa.common;
public class SystemContext {
private static ThreadLocal offset = new ThreadLocal();
private static ThreadLocal pagesize = new ThreadLocal();
public static void setOffset(int _offset){
offset.set(_offset);
}
public static int getOffset(){
Integer _offset = (Integer)offset.get();
if(_offset == null){
return 0;
}
return _offset;
}
public static void removeOffset(){
offset.remove();
}
public static void setPagesize(int _pagesize){
pagesize.set(_pagesize);
}
public static int getPagesize(){
Integer _pagesize = (Integer)pagesize.get();
if(_pagesize == null){
return Integer.MAX_VALUE;
}
return _pagesize;
}
public static void removePagesize(){
pagesize.remove();
}
}
5.建立过滤器,读出ThreadLocal中的显示的起始记录数和每页显示行数。这里没有在界面中去设置用户可以选择每页显示多少条记录的功能,此处固定为每页显示5条记录。
package com.v.oa.common;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
public class PagerFilter implements Filter {
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest)request;
SystemContext.setOffset(getOffset(httpRequest));
SystemContext.setPagesize(getPagesize(httpRequest));
try{
chain.doFilter(request, response);
}finally{
SystemContext.removeOffset();
SystemContext.removePagesize();
}
}
private int getOffset(HttpServletRequest request){
int offset = 0;
try {
offset = Integer.parseInt(request.getParameter("pager.offset"));
} catch (Exception ignore) {
}
return offset;
}
private int getPagesize(HttpServletRequest request){
return 5;
}
public void init(FilterConfig arg0) throws ServletException {
}
}
6.action中:
pro