JSP通用分页框架

时间:2021-05-26

写一个通用的分页框架,这样在项目里面如果想实现分页功能,只需要稍加改动参数就可以实现分页处理了。这样写了会节省很多时间。

一.分页类

既然要分页那么我们就要考虑建一个通用的分页类,里面需要的参数一般有:

总页数 totalPage

总共记录数 totalRecord

每页显示数 pageSize

当前页pageIndex

承载当前页数据的集合 List datas

完整代码:Page.java

import java.util.List;public class Pager<E> {/*** 总共页数*/private int totalPages;/*** 总共记录数*/private int totalRecords;/*** 每页显示数量*/private int pageSize;/*** 当前页*/private int pageIndex;/*** 当前页数据集合*/private List<E> datas;public void setTotalPages(int totalPages) {this.totalPages = totalPages;}public void setTotalRecords(int totalRecords) {this.totalRecords = totalRecords;}public void setPageSize(int pageSize) {this.pageSize = pageSize;}public void setPageIndex(int pageIndex) {this.pageIndex = pageIndex;}public void setDatas(List<E> datas) {this.datas = datas;}public int getTotalPages() {return totalPages;}public int getTotalRecords() {return totalRecords;}public int getPageSize() {return pageSize;}public int getPageIndex() {return pageIndex;}public List<E> getDatas() {return datas;}}

二.用户类

这里以查询用户来做分页为例,所以就需要一个用户类

用户号 userId

用户姓名 username

用户密码 password

注册时间 regdate

完整代码

import java.sql.Timestamp;public class User {private int userId;//用户idprivate String username;//用户名private String password;//密码private Timestamp regdate;//注册时间public int getUserId() {return userId;}public void setUserId(int userId) {this.userId = userId;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public Timestamp getRegdate() {return regdate;}public void setRegdate(Timestamp regdate) {this.regdate = regdate;}}

三.threadLocal提取公用参数

先说如果不提取公共参数,比如pagesize,pageindex,那么我们的查询方法应该是这样子:

public void GetUsers(String name,int pagesize,int pageIndex)

如果以后再增加参数,无疑这里的参数会变的很多,所以我们利用threadLocal把pagesize和pageindex提取出来.

先写这个类

public class SystemContext {//页大小private static ThreadLocal<Integer> pageSize = new ThreadLocal<>();//当前页private static ThreadLocal<Integer> pageIndex = new ThreadLocal<>();public static Integer getPageSize() {return pageSize.get();}public static void removePageSize(){pageSize.remove();}public static void setPageSize(int _pageSize) {pageSize.set(_pageSize);}public Integer getPageIndex() {return pageIndex.get();}public void setPageIndex(int _pageIndex) {pageIndex.set(_pageIndex);}public static void removePageIndex(){pageIndex.remove();}}

对于threadLocal,这个变量会在线程中一直存在,那么我们就可以在向服务器发送请求的时候添加参数,服务器返回数据的时候移除参数,一来一回的话,自然而然可以用过滤器

那么过滤器如下:

import com.dao.SystemContext;import javax.servlet.*;import java.io.IOException;public class SystemFilter implements Filter{int pageSize;int pageIndex = 1;@Overridepublic void init(FilterConfig filterConfig) throws ServletException {try {pageSize = Integer.parseInt(filterConfig.getInitParameter("pagesize"));} catch (NumberFormatException e) {pageSize = 15;}}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {try {pageIndex = Integer.parseInt(servletRequest.getParameter("pageindex"));}catch (NumberFormatException e){//什么也不做,pageindex=1}try {//开始请求的时候配置参数SystemContext.setPageSize(pageSize);SystemContext.setPageIndex(pageIndex);filterChain.doFilter(servletRequest,servletResponse);}finally {//请求返回的时候移除参数SystemContext.removePageIndex();SystemContext.removePageSize();}}@Overridepublic void destroy() {}}

用了过滤器,自然要在web.xml中配置过滤器

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http:///tags/navigation/pager" %><%--参数依次是项目总数 每页显示数量 下方菜单显示数 当前页curPage--%><pg:pager items="<%=items%>" maxPageItems="<%=maxPageItems%>" maxIndexPages="<%=maxIndexPages%>" export="curPage=pageNumber"><pg:param name="<%=params%>"/><pg:first><a href="<%=pageUrl%>">首页</a></pg:first><pg:prev><a href="<%=pageUrl%>">上一页</a></pg:prev><pg:pages><%if(curPage==pageNumber) {%>[<%=pageNumber %>]<%} else {%><a href="<%=pageUrl%>"><%=pageNumber %></a><%}%></pg:pages><pg:next><a href="<%=pageUrl %>">下一页</a></pg:next><pg:last><a href="<%=pageUrl %>">尾页</a></pg:last></pg:pager>

分页设计基本就是上面框架,重点是参数传递,这里参数传递利用静态引入的时候,配置jsp:param,然后到fenye,jsp中再取出.
其中pager-taglib中有一个标签是”/>,这个就是针对我的查询条件传递过来的参数,如果没传递,那么查询的话点击下一页也会出错,这里还有一个问题就是编码问题,pager-taglib默认编码是GB2312,你可以重新打包文件编译,也可以在tomcat的server.xml文件中配置urlEncording=”utf-8”,这样就会没问题了.

七.总结

这样的一个框架,如果其他需要实现分页的就可以直接套用了,建立相应的实体类,写好分页代码,直接套用Systemcontex.java和SystemFilter.java(记得在web.xml配置相应的过滤文件),再jsp中可以直接使用fenye.jsp,这样就会省下很多麻烦

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章