为了方便随取随用
具体实现:首页、末页、上一页(变灰)、下一页(变灰)、当前页高亮、页数可视范围、点击页数跳转等等。。
page.java
/**
* 封装分页相关的信息
*/
public class Page {
//页面传入 当前页码
private int current=1;
//显示上限
private int limit=10;
//自己查的数据总数,用来计算总页数
private int rows;
//返回查询路径(用来复用分页链接)
private String path;
public int getCurrent() {
return current;
}
public void setCurrent(int current) {
if (current>=1) {
this.current = current;
}
}
public int getLimit() {
return limit;
}
public void setLimit(int limit) {
if (limit>=1&&limit<=100){
this.limit = limit;
}
}
public int getRows() {
return rows;
}
public void setRows(int rows) {
if (rows>=0) {
this.rows = rows;
}
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
/**
* 获取当前页的起始行
*/
public int getOffset(){
//current * limit - limit
return (current - 1) * limit;
}
/**
* 获取总页数
* @return
*/
public int getTotal(){
// rows / limit[+1]
if (rows % limit==0){
return rows/limit;
}
else {
return rows/limit+1;
}
}
/**
* 获取起始页码.最近的两页
* @return
*/
public int getFrom(){
int from=current-2;
return from<1?1:from;
}
/**
* 获取终止页码
*/
public int getTo(){
int to=current+2;
int total=getTotal();
return to>total?total:to;
}
}
index.html
<nav class="mt-5" th:if="${page.rows>0}">
<ul class="pagination justify-content-center">
<li class="page-item">
<a class="page-link" th:href="@{${page.path}(current=1)}">首页</a>
</li>
<li th:class="|page-item ${page.current==1?'disabled':''}|">
<a class="page-link" th:href="@{${page.path}(current=${(page.current)-1})}">上一页</a>
</li>
<li th:class="|page-item ${page.current==i?'active':''}|" th:each="i:${#numbers.sequence(page.from,page.to)}">
<a class="page-link" th:href="@{${page.path}(current=${i})}" th:text="${i}">1</a>
</li>
<li th:class="|page-item ${page.current==page.total?'disabled':''}|" >
<a class="page-link" th:href="@{${page.path}(current=${(page.current)+1})}">下一页</a>
</li>
<li class="page-item">
<a class="page-link" th:href="@{${page.path}(current=${page.total})}">末页</a>
</li>
</ul>
</nav>