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的參數附加到分頁鏈接中,有多個時用逗號隔開。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章