纯手动实现bootstrap+thymeleaf分页

前端代码

 <!-- 分页部分start -->
<nav aria-label="Page navigation">
  <ul class="pagination">
  <li>
    	<div>
    		总条数:<span th:text="${page.getTotalCount()}"></span>&nbsp;&nbsp;
    		总页数:<span th:text="${page.getTotalPageCount()}"></span>&nbsp;&nbsp;
    		当前页码:<span th:text="${page.getCurrentPage()}"></span>
		</div>
    </li>
   <li>
      <a th:href="@{/permission/applyList/(currentPage=1,pageSize=${page.pageSize} )}" aria-label="Previous">
        <span aria-hidden="true">&laquo;首页</span>
      </a>
    </li>
    <li>
      <a th:href="@{/permission/applyList/(currentPage=${page.currentPage-1},pageSize=${page.pageSize} )}" aria-label="Previous">
        <span aria-hidden="true">&laquo;上一页</span>
      </a>
    </li>
    
    <li>
      <a th:href="@{/permission/applyList/(currentPage=${page.currentPage+1},pageSize=${page.pageSize} )}" aria-label="Next">
        <span aria-hidden="true">下一页&raquo;</span>
      </a>
    </li>
    
    <li>
  	  <a th:href="@{/permission/applyList/(currentPage=${page.totalPageCount},pageSize=${page.pageSize} )}" aria-label="Next">
        <span aria-hidden="true">尾页&raquo;</span>
      </a>
    </li>
    
    <li>
      <!-- 调整pageSize start -->
	  <div class="btn-group">
		  <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" th:text=" '每页显示:' + ${page.pageSize}">
		     <span class="caret"></span>
		  </button>
		    <ul class="dropdown-menu">
			    <li><a th:href="@{/permission/applyList/(currentPage=${page.currentPage},pageSize=5 )}">5</a></li>
			    <li><a th:href="@{/permission/applyList/(currentPage=${page.currentPage},pageSize=20 )}">10</a></li>
			    <li><a th:href="@{/permission/applyList/(currentPage=${page.currentPage},pageSize=50 )}">50</a></li>
			    <li><a th:href="@{/permission/applyList/(currentPage=${page.currentPage},pageSize=100 )}">100</a></li>
			    <li><a th:href="@{/permission/applyList/(currentPage=${page.currentPage},pageSize=500 )}">500</a></li>
		  </ul>
	  </div>
	  <!-- 调整pageSize结束 -->
    </li>
  </ul>
</nav>
<!-- 分页部分end -->

后端Page<T>对象

package com.haben.hivemetamgr.paging;

import java.util.ArrayList;
import java.util.List;

/**
 * 自定义分页组件
 * 
 * @author CJ
 * @param <T>
 */
public class Page<T> {

	public enum Sort {
		ASC, DESC;
	}

	private List<T> datas = new ArrayList<T>(0);
	private boolean hasPreviousPage;
	private boolean hasNextPage;
	private int totalCount; // 总记录数
	private int totalPageCount; // 总页数
	private int currentPage = 1; // 当前第几页
	private int pageSize = 5; // 每页记录数
	private Enum<Sort> sort;

	public void gotoPreviousPage() // 向前翻页
	{
		if (isHasPreviousPage()) {
			currentPage = currentPage - 1;
		}
	}

	public void gotoNextPage() // 向后翻页
	{
		if (isHasNextPage()) {
			currentPage = currentPage + 1;
		}
	}

	public void gotoFirstPage() // 跳向首页
	{
		currentPage = 1;
	}

	public void gotoLastPage() // 跳向尾页
	{
		currentPage = totalPageCount;
	}

	public List<T> getDatas() {
		return datas;
	}

	public void setDatas(List<T> datas) {
		this.datas = datas;
	}

	public boolean isHasPreviousPage() {
		if (currentPage > 1) {
			hasPreviousPage = true;
		} else {
			hasPreviousPage = false;
		}
		return hasPreviousPage;
	}

	public void setHasPreviousPage(boolean hasPreviousPage) {
		this.hasPreviousPage = hasPreviousPage;
	}

	public boolean isHasNextPage() {
		if (currentPage < getTotalPageCount()) {
			hasNextPage = true;
		} else {
			hasNextPage = false;
		}
		return hasNextPage;
	}

	public void setHasNextPage(boolean hasNextPage) {
		this.hasNextPage = hasNextPage;
	}

	public int getTotalCount() {
		return totalCount;
	}

	public void setTotalCount(int totalCount) {
		this.totalCount = totalCount;
	}

	public int getTotalPageCount() {
		if (totalCount % pageSize == 0) {
			totalPageCount = totalCount / pageSize; // 总记录数 / 每页显示的数量 = 总页数
		} else {
			totalPageCount = totalCount / pageSize + 1; // 总记录数 / 每页显示的数量 =
														// 总页数+1
		}
		return totalPageCount;
	}

	public void setTotalPageCount(int totalPageCount) {
		this.totalPageCount = totalPageCount;
	}

	/**
	 * 防止当前页码的游标越界
	 */
	public int getCurrentPage() {
		if(this.currentPage > this.getTotalPageCount()){
			currentPage = this.getTotalPageCount();
		}
		return this.currentPage <= 0 ? 1 : this.currentPage;
	}

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

	public int getPageSize() {
		return pageSize;
	}

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

	public Enum<Sort> getSort() {
		return sort;
	}

	public void setSort(Enum<Sort> sort) {
		this.sort = sort;
	}

	/**
	 * 冗余一个get方法用于thymeleaf前端反射调用
	 */
	public boolean getHasPreviousPage() {
		if (currentPage > 1) {
			hasPreviousPage = true;
		} else {
			hasPreviousPage = false;
		}
		return hasPreviousPage;
	}

	/**
	 * 冗余一个get方法用于thymeleaf前端反射调用
	 */
	public boolean getHasNextPage() {
		if (currentPage < getTotalPageCount()) {
			hasNextPage = true;
		} else {
			hasNextPage = false;
		}
		return hasNextPage;
	}

}

后端代码 :

/**
 * 权限申请页面-审批页面
 */
@RequestMapping(value= {"/applyList","/"})
public String applyList(Model model,Integer status , Page<PrivApprove> page) {
	if(status == null) {
		status = -1;
	}
	Page<PrivApprove> privApproves = privilegeService.getPrivList(status, page);
	model.addAttribute("privApproves", privApproves.getDatas());
	model.addAttribute("page", page);
	return "permission/permission_apply_list";
}

 

DAO层实现,用jdbctemplate,仅做简单演示

int totalCnt = jdbcTemplate.queryForObject("select count(*) from t_priv_approve order by create_time desc", Integer.class);
page.setTotalCount(totalCnt);
int offset = (page.getCurrentPage() - 1) * page.getPageSize();
int limit = page.getPageSize();
list = jdbcTemplate.queryForList("select * from t_priv_approve order by create_time desc limit ? , ?", offset, limit);

 

转载于:https://my.oschina.net/u/2338224/blog/1611881

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值