struts1应用pager-taglib实现分页

一、原理:

1、用pager-taglib做前台页面,向后台传入pagesize,offset参数

2、添加PagerFilter做分页过滤器,在里面接收pagesize,offset参数,并设置到类型为ThreadLocal的 pagesize和offset中

3、在DAO层,sql语句中,用SystemContext.getPagesize()取出pagesize,用SystemContext.getOffset()取出offset,进行数据库的分页查询

二、具体实现:

1、  前台

(1)、引入pager-taglib的jar包

(2)、JSP页面

 

<pg:pager items="${pm.total }" url="user.do" port="currentPageNumber=pageNumber">

<pg:param name="method" value="listUsers"/>

<pg:first><a href="${pageUrl}">首页</a></pg:first>

<pg:prev><a href="${pageUrl }">前页</a></pg:prev>

<pg:pages>

           <c:choose>

           <c:when test="${ currentPageNumber eq pageNumber}">

           <font color="red">${pageNumber}</font>

           </c:when>

           <c:otherwise>

           <a href="${pageUrl }">${pageNumber }</a>

           </c:otherwise>

           </c:choose>

</pg:pages>

<pg:next><a href="${pageUrl }">下页</a></pg:next>

<pg:last><a href="${pageUrl }">尾页</a></pg:last>

</pg:pager> 


2、  用一个SystemContext类封装pagesize和offset

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 os = (Integer)offset.get();
  if(os == null){
   return 0;
  }
  return os;
 }
 
 public static void removeOffset(){
  offset.remove();
 }
 
 public static void setPagesize(int _pagesize){
  pagesize.set(_pagesize);
 }
 
 public static int getPagesize(){
  Integer ps = (Integer)pagesize.get();
  if(ps == null){
   return Integer.MAX_VALUE;
  }
  return ps;
 }
 
 public static void removePagesize(){
  pagesize.remove();
 }
}


 

 3、  实现一个过滤器,接收pagesize和offset两个参数,并设置到SystemContext相应的属性中

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;

import com.bjsxt.oa.SystemContext;

public class PagerFilter implements Filter {
 public static final String PAGE_SIZE_NAME = "ps";
 public void destroy() {

 }

 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 httpRequest){
//  return 10;
  
  //首先判断request中是否有pagesize参数,如果有这个参数,证明客户端正在请求改变每页显示的行数
  String psvalue = httpRequest.getParameter("pagesize");
  if(psvalue != null && !psvalue.trim().equals("")){
   Integer ps = 0;
   try {
    ps = Integer.parseInt(psvalue);
   } catch (Exception e) {
   }
   if(ps != 0){
    httpRequest.getSession().setAttribute(PAGE_SIZE_NAME, ps);
   }
  }
  
  //判断当前session中是否有pagesize的值
  Integer pagesize = (Integer)httpRequest.getSession().getAttribute(PAGE_SIZE_NAME);
  if(pagesize == null){
   httpRequest.getSession().setAttribute(PAGE_SIZE_NAME, 10);
   return 10;
  }
  
  return pagesize;
 }

 public void init(FilterConfig arg0) throws ServletException {

 }

}


 

4、  在DAO层的sql语句中,取出pagesize和offset实现分页查询

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值