pager_taglib使用

1) 准备

原始的pager-taglib.jar可能会导致中文乱码(准确说是在url中有中文时),要用修改过的。(要没有可给我评论中索取)

2) 分页jsp文件

将分页的代码写到一个独立的jsp文件中,

<%@ pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>

<%--这是给编译器看的,应在每个文件上都加上,要不保存时都会出问题,选择save as UTF-8也会乱码 --%>

<%@ taglibprefix="pg"uri="http://jsptags.com/tags/navigation/pager"%>

<%@ tagliburi="http://java.sun.com/jsp/jstl/core"prefix="c"%>

 

<script type="text/javascript">

    function selectPagesize(select){

       var newPageSize=select.value;

       var url=document.getElementById("firstPage").href;

       window.location=url+"&newPageSize="+newPageSize;

    }

</script>

<pg:pager url="${param.servletUrl}"items="${total }"maxIndexPages="9"maxPageItems="${pageSize }"export="currentPage=pageNumber">

    <table width="100%"border="0"cellspacing="0"cellpadding="0">

      <tr>

        <tdwidth="33%"><divalign="left"><spanclass="STYLE22">&nbsp;&nbsp;&nbsp;&nbsp;共有<strong> ${total }</strong> 条记录,当前第<strong>${currentPage }</strong> 页,共 <strong><spanid="totalPage"><pg:last>${pageNumber }</pg:last></span></strong></span></div></td>

        <tdwidth="67%"align=rightvalign="top"noWrap>

        <c:forEachitems="${param.queryParam}"var="p">

             <pg:paramname="${p }"/>

        </c:forEach>            

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

        <pg:prev><ahref="${pageUrl }">上一页</a></pg:prev>

        <pg:pages>

        <c:choose>

            <c:whentest="${currentPageeq pageNumber }">

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

            </c:when>

            <c:otherwise>

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

            </c:otherwise>

        </c:choose> 

        </pg:pages>      

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

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

 

              每页<selectname="pagesize"onchange="selectPagesize(this)">

                  <c:forEachbegin="5"step="5"end="50"var="newPageSize">                

                     <optionvalue="${newPageSize }"<c:iftest="${newPageSize eqpageSize }">selected</c:if>>${newPageSize }</option>              

                  </c:forEach>

              </select>

      </td>

      </tr>

    </table>

</pg:pager>

3) 在需要分页的页面中包含此页面

<jsp:includepage="/WEB-INF/views/common/pager.jsp">

       <jsp:paramvalue="${article_list}" name="servletUrl"/>

       <jsp:param value="title"name="queryParam"/>

</jsp:include>

queryParam是需要在url后附加参数,比如说模糊查询时的文章名用,如果不需要就可以去掉。不去没影响的,所以是一个通用的分页模块。后面有详细的使用讲解。

4) 使用ThreadLocal模式

为了避免分页参数多次传递,使用ThreadLocal模式

public class PagerContext {

    private static ThreadLocal<Integer> offset=new ThreadLocal<Integer>();

    private static ThreadLocal<Integer> pageSize=new ThreadLocal<Integer>();

    public static int getOffset(){

       Integer _offset=offset.get();

       if(_offset!=null)

           return _offset;

       else{

           return 0;

       }

    }

    public static void setOffset(int_offset){

       offset.set(_offset);

    }

    public static void removeOffset(){

       offset.remove();

    }

    public static int getPageSize(){

       Integer _pagesize=pageSize.get();

       if(_pagesize!=null)

           return _pagesize;

       else{

           return 10;

       }

    }

    public static void setPageSize(int_pagesize){

       pageSize.set(_pagesize);

    }

    public static void removePageSize(){

       pageSize.remove();

    }

}

5) 获取offset与pageSize参数

这两个参数指从数据库中第几个开始取和一次取多少个。

public int getOffset(HttpServletRequest request){

       int offset=0;

       StringoffsetParam=request.getParameter("pager.offset");

       if(offsetParam!=null){

           offset=Integer.parseInt(offsetParam);

       }

       return offset;

    }

    public int getPageSize(HttpServletRequest request){

       //默认为10

       int pageSize=10;

       //如果有修改每页显示数目的参数,则修改session中的值,并显示第一页

       StringnewPageSize=request.getParameter("newPageSize");

       if(newPageSize!=null){

           pageSize=Integer.parseInt(newPageSize);

           request.getSession().setAttribute("pageSize", pageSize);

       }else{

           //得到每页显示记录数,从session中取,如果没有则将默认值放入session

           IntegerpageSizeAttr=(Integer) request.getSession().getAttribute("pageSize");

           if(pageSizeAttr==null){

              request.getSession().setAttribute("pageSize", pageSize);

           }else{

              pageSize=pageSizeAttr;

           }

       }

       return pageSize;

    }

6) 请求处理

PagerContext.setOffset(getOffset(request));

PagerContext.setPageSize(getPageSize(request));

然后就是查询数据库

注意分页需要知道数据的总量,要为jsp传一个名为total的参数。ActionContext.getContext().put("total", total);这个是struts2的写法,放在request里。

7) 带参数的分页查询

<jsp:include page="/WEB-INF/common/pager.jsp">

    <jsp:param value="${ article_list }" name="servletUrl"/>

    <jsp:param value="title" name="queryParam"/>

</jsp:include>

假如分页查询所有文章,那么   <jsp:param value="title" name="queryParam"/>

完全可以不要。当要查询文章名中带param的文章时,就要附加一个参数url?title=param,这时如果仍不加这句,那么生成的分页链接,上一页,下一页等都没有这个参数,这样就不是条件查询了。<jsp:param value="title" name="queryParam"/>表示把请求中名为title的参数附加到分页链接中,有多个时用逗号隔开。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值