分页基本算法

分页模块中, 页码 1,2,【3】,4,5的显示,要显示5个页码, 并且页码可以点击跳转。

需求: 显示 5 个连续的页码, 而且当前页码在中间。除了当前页码之外, 每个页码都可以点击跳到指定页。

  • 情况 1: 如果总页码小于等于 5 的情况, 页码的范围是:
    1-总页码
    1 页 1
    2 页 1, 2
    3 页 1, 2, 3
    4 页 1, 2, 3, 4
    5 页 1, 2, 3, 4, 5
  • 情况 2: 总页码大于 5 的情况。 假设一共 10 页
    • 小情况 1: 当前页码为前面 3 个: 1, 2, 3 的情况, 页码范围是: 1-5.
      【1】 2, 3, 4, 5
      1【2】 3, 4, 5
      1, 2【3】 4, 5
    • 小情况 2: 当前页码为最后 3 个, 8, 9, 10, 页码范围是: 总页码减 4 - 总页码
      6, 7【8】 9, 10
      6, 7, 8【9】 10
      6, 7, 8, 9【10】
    • 小情况 3: 4, 5, 6, 7, 页码范围是: 当前页码减 2 - 当前页码加 2
      2, 3, 4, 5, 6
      3, 4, 5, 6, 7
      4, 5, 6, 7, 8
      5, 6, 7, 8, 9

      jsp前端代码实现使用ESTL表达式

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      <%--页码输出的开始--%>
      <c:choose>
      <%--情况 1: 如果总页码小于等于 5 的情况, 页码的范围是: 1-总页码--%>
      <c:when test="${ requestScope.page.pageTotal <= 5 }">
      <c:set var="begin" value="1"/>
      <c:set var="end" value="${requestScope.page.pageTotal}"/>
      </c:when>
      <%--情况 2: 总页码大于 5 的情况--%>
      <c:when test="${requestScope.page.pageTotal > 5}">
      <c:choose>
      <%--小情况 1: 当前页码为前面 3 个: 123 的情况, 页码范围是: 1-5.--%>
      <c:when test="${requestScope.page.pageNo <= 3}">
      <c:set var="begin" value="1"/>
      <c:set var="end" value="5"/>
      </c:when>
      <%--小情况 2: 当前页码为最后 3 个, 8910, 页码范围是: 总页码减 4 - 总页码--%>
      <c:when test="${requestScope.page.pageNo > requestScope.page.pageTotal-3}">
      <c:set var="begin" value="${requestScope.page.pageTotal-4}"/>
      <c:set var="end" value="${requestScope.page.pageTotal}"/>
      </c:when>
      <%--小情况 34567, 页码范围是: 当前页码减 2 - 当前页码加 2--%>
      <c:otherwise><c:set var="begin" value="${requestScope.page.pageNo-2}"/>
      <c:set var="end" value="${requestScope.page.pageNo+2}"/>
      </c:otherwise>
      </c:choose>
      </c:when>
      </c:choose>
      <c:forEach begin="${begin}" end="${end}" var="i">
      <c:if test="${i == requestScope.page.pageNo}">
      【 ${i}】
      </c:if>
      <c:if test="${i != requestScope.page.pageNo}">
      <a href="manager/bookServlet?action=page&pageNo=${i}">${i}</a>
      </c:if>
      </c:forEach>
      <%--页码输出的结束--%>