servlet+jsp實現分頁功能


1.分頁萬精油jsp頁面,只需要傳入pagebean對象

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<div class="dataTables_paginate paging_simple_numbers"
     id="DataTables_Table_0_paginate">
    <a class="paginate_button previous disabled"
       aria-controls="DataTables_Table_0" data-dt-idx="0" tabindex="0"
       id="DataTables_Table_0_previous" href="<c:url value="${page.url}&currentPage=1"/>">首頁</a>
    <c:if test="${page.currentPage > 1 }">
        <a class="paginate_button previous disabled"
           aria-controls="DataTables_Table_0" data-dt-idx="0" tabindex="0"
           id="DataTables_Table_0_previous"
           href="<c:url value='${page.url}&currentPage=${page.currentPage - 1 }'/>">上一頁</a>
    </c:if>

    <c:choose>
        <c:when test="${page.totalPage <= 10 }">
            <c:set var="begin" value="1"/>
            <c:set var="end" value="${page.totalPage }"/>
        </c:when>
        <c:otherwise>
            <c:set var="begin" value="${page.currentPage-4 }"/>
            <c:set var="end" value="${page.currentPage+5 }"/>
            <c:choose>
                <c:when test="${begin < 1 }">
                    <c:set var="begin" value="1"/>
                    <c:set var="end" value="10"/>
                </c:when>
                <c:when test="${end > page.totalPage }">
                    <c:set var="begin" value="${page.totalPage-9 }"/>
                    <c:set var="end" value="${page.totalPage }"/>
                </c:when>
            </c:choose>
        </c:otherwise>
    </c:choose>


    <c:forEach begin="${begin}" end="${end}" var="i">
        <c:choose>

            <c:when test="${i == page.currentPage}"><span style="color: red">${i}</span></c:when>

            <c:otherwise>
                    <span><a
                            class="paginate_button current" aria-controls="DataTables_Table_0"
                            data-dt-idx="1" tabindex="0"
                            href="<c:url value='${page.url}&currentPage=${i}'/>"
                    > ${i}</a> </span>

            </c:otherwise>
        </c:choose>
    </c:forEach>


    <c:if test="${page.currentPage < page.totalPage }">
        <a class="paginate_button next disabled"
           aria-controls="DataTables_Table_0" data-dt-idx="2" tabindex="0"
           id="DataTables_Table_0_next"
           href="<c:url value='${page.url}&currentPage=${page.currentPage + 1 }'/>"
        >下一頁</a>
    </c:if>
    <a class="paginate_button next disabled"
       aria-controls="DataTables_Table_0" data-dt-idx="2" tabindex="0"
       id="DataTables_Table_0_next"
       href="<c:url value='${page.url}&currentPage=${page.totalPage}'/>"
    >尾頁</a>

</div>

 

2.PagaBean類,儲存分頁需要的數據

/**
 * 有些沒必要設置get/set,為了節省時間,不搞了
 *
 * @param <T>
 */
public class PageBean<T> {
    private int currentPage; //當前頁
    private int pageSize; //每頁記錄數
    private int totalPage;//總頁數
    private List<T> pageBean;//當前頁對象
    private String url;//用來設置Servlet訪問路徑及method參數
    private int totleCount;//總數據數

    public int getCurrentPage() {
        return currentPage;
    }

    public void setCurrentPage(int currentPage) {
        this.currentPage = currentPage;
    }

    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    public int getTotalPage() {
        return totalPage;
    }

    public void setTotalPage(int totalPage) {
        this.totalPage = totalPage;
    }

    public List<T> getPageBean() {
        return pageBean;
    }

    public void setPageBean(List<T> pageBean) {
        this.pageBean = pageBean;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url,HttpServletRequest request) {
        String uri = request.getRequestURI();    //返回“項目名/請求Servlet名”的字符串
        String quString = request.getQueryString(); //獲取請求的參數部分
         url = uri + "?" + quString;   //拼串,請求地址:項目名/servlet名?參數
     if (url.contains("&currentPage")) {
            //截串,將沒有用的參數截去,只留下用於反射的method參數
         url = url.substring(0, url.indexOf("&currentPage"));
        }
      this.url=url;
    }

    public int getTotleCount() {
        return totleCount;
    }

    public void setTotleCount(int totleCount) {
        this.totleCount = totleCount;
    }
}

 

3.dao層,主要分為兩個查詢方法,一個是總記錄數,一個是單頁的對象集合,工具類用的是dbutils,數據連接池用的是c3p0

   //查詢全部獲得總記錄數
    @Override
    public Integer totleCount() {
        String sql = "SELECT COUNT(*) FROM `grade` AS g  LEFT JOIN `class`  c ON g.`gradeId`=c.`gradeId`";
        Integer totleCount = 0;
        try {
            totleCount=((Long)queryRunner.query(sql, new ScalarHandler<>())).intValue();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return totleCount;
    }
    //查詢全部獲取當前頁對象集合
    @Override
    public List<GradeAndClass> getRoleList(int pagesize, int begin) {
        String sql="SELECT g.`gradeId`,g.`gradeName`,c.`classId`,c.`className` ,c.`orderID` FROM `grade` AS g  LEFT JOIN `class`  c ON g.`gradeId`=c.`gradeId` LIMIT ?,?";
        List<GradeAndClass> gas=null;
        try {
            gas = queryRunner.query(sql, new BeanListHandler<GradeAndClass>(GradeAndClass.class),new Object[]{begin,pagesize});
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return gas;
    }

 

4.service層,調用dao層查詢總記錄數和當前頁對象集合的方法,用於配置pagebean各個屬性值,返回pageBean對象

  //分頁+查詢全部
    @Override
    public PageBean<GradeAndClass> page(Integer pagesize, Integer currentPage,HttpServletRequest request) {
        PageBean<GradeAndClass> pageBean = new PageBean<>();
        //頁面大小
        pageBean.setPageSize(pagesize);
        //從數據庫得到總記錄數,將其放在pageBean里面
        pageBean.setTotleCount(gcDao.totleCount());
        //總頁碼
        pageBean.setTotalPage(pageBean.getTotleCount() % pageBean.getPageSize() == 0
                ? pageBean.getTotleCount() / pageBean.getPageSize()
                : pageBean.getTotleCount() / pageBean.getPageSize() + 1);
        //當前頁
        pageBean.setCurrentPage(currentPage);
        //設置url
        pageBean.setUrl("/main/gc?action=getPage",request);
        //從數據庫獲取當前頁面數據集合,傳值給pageBean對象
        pageBean.setPageBean(gcDao.getRoleList(pageBean.getPageSize(), (pageBean.getCurrentPage() - 1) * (pageBean.getPageSize())));
        return pageBean;
    }

 

4.servlet層,獲取前端傳的頁碼,返回給前端List集合(用於展示分頁的內容),pagebean對象(pagebean對象用於分頁jsp頁面)

 //查詢全部並分頁
    public String getPage(HttpServletRequest request, HttpServletResponse response){
        //獲取前端傳來的當前頁碼
        Integer currentPage = Integer.parseInt(request.getParameter("currentPage"));
        //獲取PageBean對象
        PageBean<GradeAndClass> page = gcService.page(5, currentPage,request);
        List<GradeAndClass> pageBean = page.getPageBean();
        request.setAttribute("page",page);
        request.setAttribute("gc",pageBean);
        return "/WEB-INF/views/main/allGCPage.jsp";
    }

 

5.引用分頁jsp頁面,放在需要分頁的jsp頁面適當位置,引用的是分頁頁面

<%@include file="pageModel.jsp"%>

 

6.觸發分頁,傳參當前頁

<li><a data-href="/main/gcc?action=getPage&currentPage=1" data-title="課程管理" href="javascript:void(0)">全部課程</a></li>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM