Controller返回分页数据之后,发现页码显示过多,影响美观.
经过处理过后,看着就舒服多了
下面是中间页实现代码
model.addAttribute("page", pageBean);
pageBean的属性看下面
<%--中间页--%>
<%--显示6页中间页[begin=起始页,end=最大页]--%>
<%--总页数没有6页--%>
<c:choose>
<c:when test="${page.totalPage <= 6}">
<c:set var="begin" value="1"/>
<c:set var="end" value="${page.totalPage}"/>
</c:when>
<%--页数超过了6页--%>
<c:otherwise>
<c:set var="begin" value="${page.currentPage - 1}"/>
<c:set var="end" value="${page.currentPage + 3}"/>
<%--如果begin减1后为0,设置起始页为1,最大页为6--%>
<c:if test="${begin -1 <= 0}">
<c:set var="begin" value="1"/>
<c:set var="end" value="6"/>
</c:if>
<%--如果end超过最大页,设置起始页=最大页-5--%>
<c:if test="${end > page.totalPage}">
<c:set var="begin" value="${page.totalPage - 5}"/>
<c:set var="end" value="${page.totalPage}"/>
</c:if>
</c:otherwise>
</c:choose>
<%--遍历--%>
<c:forEach var="i" begin="${begin}" end="${end}">
<%--当前页,选中--%>
<c:choose>
<c:when test="${i == page.currentPage}">
<li class="active"><a href="#">${i}</a></li>
</c:when>
<%--不是当前页--%>
<c:otherwise>
<li><a href="<%=basePath%>customer/findAll.action?currentPage=${i}">${i}</a></li>
</c:otherwise>
</c:choose>
</c:forEach>
逻辑比较简单,多看几遍就能明白.
分页使用的BootStrap,官网就有
下面是一些其他数据和说明教程,不需要的可无视.
个人比较喜欢将分页数据封装到JavaBean里,使用起来比较舒服,看着也不乱.
/**
* Created with IntelliJ IDEA.
*
* @author: ChuRuo Xu
*/
public class PageBean<T> {
/**
* 当前页
*/
private Integer currentPage;
/**
* 每页显示条数
*/
private Integer pageSize;
/**
* 总记录数
*/
private Integer totalCount;
/**
* 总页数
*/
private Integer totalPage;
/**
* 每页数据内容
*/
private List<T> content;
总记录数到数据库查询count即可,使用的Mybatis
<!-- 查询客户总记录数-->
<select id="findCustomerCount" resultType="Integer">
SELECT COUNT(*) FROM `customer`
</select>
有了当前页(起始页面肯定是1),每页显示条数(自己设置),总记录数,然后可以算出总页数.
总页数 = (总记录数 - 1 + 每页显示条数) / 每页显示条数
然后就可以算出[从第几条数据开始查询]
begin = (当前页 - 1) * 每页显示条数
分页查询语句用limit,简单, 传递参数不要忘记使用@Param,建议使用这种方式传参,阅读性好!<!--分页查询客户信息-->
<select id="findAll" parameterType="Integer" resultType="com.springmvc.domain.Customer">
SELECT * FROM `customer` limit #{begin},#{pageSize}
</select>
/**
* 分页查询客户信息
*
* @param begin 从第几条开始
* @param pageSize 每页条数
* @return List<Customer>
*/
List<Customer> findAll(@Param("begin") Integer begin, @Param("pageSize") Integer pageSize);
到此PageBean的所有数据都有了,返回到页面从域中取出来即可
首页和尾页的判断
<%--如果是第一页,不允许点击--%>
<c:choose>
<c:when test="${page.currentPage == 1}">
<li class="disabled">
<a href="#" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
</c:when>
<c:otherwise>
<%-- 点击到首页--%>
<li>
<a href="<%=basePath%>customer/findAll.action?currentPage=1" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
</c:otherwise>
</c:choose>
<%--如果是最后一页,不允许点击--%>
<c:choose>
<c:when test="${page.currentPage == page.totalPage}">
<li class="disabled">
<a href="#" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
</c:when>
<c:otherwise>
<%-- 点击到尾页--%>
<li>
<a href="<%=basePath%>customer/findAll.action?currentPage=${page.totalPage}" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>
</c:otherwise>
</c:choose>