分页基本算法
分页模块中, 页码 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, 9jsp前端代码实现使用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 个: 1, 2, 3 的情况, 页码范围是: 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 个, 8, 9, 10, 页码范围是: 总页码减 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>
<%--小情况 3: 4, 5, 6, 7, 页码范围是: 当前页码减 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>
<%--页码输出的结束--%>
- 小情况 1: 当前页码为前面 3 个: 1, 2, 3 的情况, 页码范围是: 1-5.