首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Spring MVC 實作分頁功能完整教學

     編輯:Java 綜合教學

Spring MVC 實作分頁功能完整教學

在專案開發中,資料分頁是常見需求。本文記錄一套基於 Spring MVC 的手動分頁實作方案,包含控制層邏輯、配置檔設定與前端頁面渲染。

控制層實作

透過 @Value 從配置檔讀取每頁筆數,控制器方法接收查詢條件與頁碼參數:

@Value("#{configProperties['schoolPageSize']}")
private String schoolPageSize;

@RequestMapping(value="/schoolList")
public ModelAndView schoolList(School school, String page) {
    int pageSize = Integer.valueOf(schoolPageSize).intValue();
    List<School> schoolList = schoolService.findSchoolList(school);
    ModelAndView modelAndView = new ModelAndView();
    
    int schoolNum = schoolList.size();
    modelAndView.addObject("SchoolNum", schoolNum);
    
    int pageTimes = (schoolNum % pageSize == 0) ? schoolNum / pageSize : schoolNum / pageSize + 1;
    modelAndView.addObject("pageTimes", pageTimes);
    
    if (page == null) page = "1";
    int startRow = (Integer.parseInt(page) - 1) * pageSize;
    
    List<School> schools = schoolService.getschoolByPage(startRow, pageSize);
    modelAndView.addObject("currentPage", Integer.parseInt(page));
    modelAndView.addObject("schools", schools);
    modelAndView.setViewName("school/schoolList");
    return modelAndView;
}

Spring 配置檔

在 springmvc.xml 中配置屬性檔讀取:

<bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="locations">
        <list>
            <value>classpath:value.properties</value>
        </list>
    </property>
</bean>

value.properties 內容:

schoolPageSize=5

前端分頁頁面 (JSP + JSTL)

使用 JSTL 標籤庫渲染分頁導航,包含首頁、上一頁、頁碼、下一頁、尾頁:

<div class="pagging">
    <div class="left">共${SchoolNum}條記錄</div>
    <div class="right">
        <c:if test="${currentPage == 1}">
            <span class="disabled"><< 前一頁</span>
        </c:if>
        <c:if test="${currentPage != 1}">
            <a href="school/schoolList.action?page=${currentPage-1}"><< 前一頁</a>
        </c:if>
        
        <c:if test="${currentPage == 1}">
            <span class="current">1</span>
        </c:if>
        <c:if test="${currentPage != 1}">
            <a href="school/schoolList.action?page=1">1</a>
        </c:if>
        
        <!-- 頁碼迴圈邏輯 -->
        <%
            for(int i=1; i<pageTimes; i++) {
                request.setAttribute("page", i+1);
        %>
        <c:if test="${currentPage == page}">
            <span class="current"><%=i+1%></span>
        </c:if>
        <c:if test="${currentPage != page}">
            <a href="school/schoolList.action?page=<%=i+1%>"><%=i+1%></a>
        </c:if>
        <% } %>
        
        <c:if test="${currentPage == pageTimes}">
            <span class="disabled">後一頁 >></span>
        </c:if>
        <c:if test="${currentPage != pageTimes}">
            <a href="school/schoolList.action?page=${currentPage+1}">後一頁 >></a>
        </c:if>
    </div>
</div>

關鍵要點總結

  • 分頁核心邏輯:startRow = (page - 1) * pageSize 計算資料庫查詢起始位置
  • 總頁數計算:pageTimes = (total % pageSize == 0) ? total/pageSize : total/pageSize + 1
  • 前端與後端頁碼參數命名一致(page)
  • 建議後續優化:使用 PageHelper 等分頁外掛簡化代碼,或採用 RESTful 風格 API 回傳 JSON 供前端框架渲染
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved