thymeleaf中通⽤的分页⽅法
在项⽬中调⽤api后将数据分页显⽰,很多的插件都是和数据库相关的使⽤数据库的 limit 特性 像 pagehelper、Spring Data Jpa这些插件,在这⾥不适合。这⾥介绍⼀种不⽤后端实现的假分页。主要是对查询后的集合进⾏下标截取。
1.⼯具类代码
import java.util.List;
// 分页⼯具类
public class PageUtil<T> {
// 对象记录结果集
private List<T> list;
// 总记录数
private int total = 0;
// 每页显⽰记录数
private int limit = 20;
// 总页数
private int pages = 1;
// 当前页
private int pageNumber = 1;
// 是否为第⼀页
private boolean isFirstPage = false;
// 是否为最后⼀页
private boolean isLastPage = false;
// 是否有前⼀页
private boolean hasPreviousPage = false;
// 是否有下⼀页
private boolean hasNextPage = false;
// 导航页码数
private int navigatePages = 8;
// 所有导航页号
private int[] navigatePageNumbers;
// 尾页
private int lastPage = 0 ;
// ⾸页
private int firstPage = 1 ;
/
/ 上⼀页
private int prePage = 0;
// 下⼀页
private int nextPage = 0;
public PageUtil(int pageNumber, int limit, List<T> list) {
init(list, pageNumber, limit);
}
private void init(List<T> list, int pageNumber, int limit){
//设置基本参数
this.list = list;
this.limit = limit;
this.pages = (al-1)/this.limit+1;
this.lastPage = pages;
this.firstPage = 1;
this.prePage = pageNumber-1;
//根据输⼊可能错误的当前号码进⾏⾃动纠正
if(pageNumber<1){
this.pageNumber=1;
}else if(pageNumber>this.pages){
this.pageNumber=this.pages;
}else{
}else{
this.pageNumber=pageNumber;
}
//基本参数设定之后进⾏导航页⾯的计算
calcNavigatePageNumbers();
//以及页⾯边界的判定
judgePageBoudary();
}
/**
* 计算导航页
*/
private void calcNavigatePageNumbers(){
//当总页数⼩于或等于导航页码数时
if(pages<=navigatePages){
navigatePageNumbers=new int[pages];
for(int i=0;i<pages;i++){
navigatePageNumbers[i]=i+1;
}
}else{ //当总页数⼤于导航页码数时
navigatePageNumbers=new int[navigatePages];
int startNum=pageNumber-navigatePages/2;
int endNum=pageNumber+navigatePages/2;
if(startNum<1){
startNum=1;
//(最前navPageCount页
for(int i=0;i<navigatePages;i++){
navigatePageNumbers[i]=startNum++;
}
}else if(endNum>pages){
endNum=pages;
//最后navPageCount页
for(int i=navigatePages-1;i>=0;i--){
navigatePageNumbers[i]=endNum--;
}
}else{
//所有中间页
for(int i=0;i<navigatePages;i++){
navigatePageNumbers[i]=startNum++;
}
}
}
}
/**
* 判定页⾯边界
*/
private void judgePageBoudary(){
isFirstPage = pageNumber == 1;
isLastPage = pageNumber == pages && pageNumber!=1; hasPreviousPage = pageNumber!=1;
hasNextPage = pageNumber!=pages;
}
/**
* 得到当前页的内容
* @return {List}
*/
public List<T> getList() {
int endIndex = total;
if(pageNumber*limit <= total){
endIndex = pageNumber*limit;
endIndex = pageNumber*limit;
}
List<T> pagelist = list.subList((pageNumber-1)*limit, endIndex); return pagelist;
}
public int getLastPage() {
return lastPage;
}
public void setLastPage(int lastPage) {
this.lastPage = lastPage;
}
public int getFirstPage() {
return firstPage;
}
public void setFirstPage(int firstPage) {
this.firstPage = firstPage;
}
public int getPrePage() {
return prePage;
}
public void setPrePage(int prePage) {
this.prePage = prePage;
}
public int getNextPage() {
return nextPage;
}
public void setNextPage(int nextPage) {
}
/**
* 得到记录总数
* @return {int}
*/
public int getTotal() {
return total;
}
/**
* 得到每页显⽰多少条记录
* @return {int}
*/
public int getLimit() {
thymeleaf用法
return limit;
}
/**
* 得到页⾯总数
* @return {int}
*/
public int getPages() {
return pages;
}
/**
* 得到当前页号
* @return {int}
* @return {int}
*/
public int getPageNumber() {
return pageNumber;
}
/**
* 得到所有导航页号
* @return {int[]}
*/
public int[] getNavigatePageNumbers() {
return navigatePageNumbers;
}
public boolean isFirstPage() {
return isFirstPage;
}
public boolean isLastPage() {
return isLastPage;
}
public boolean hasPreviousPage() {
return hasPreviousPage;
}
public boolean hasNextPage() {
return hasNextPage;
}
}
2.业务处理中的使⽤
/**
* 进⼊⽤户列表⾸页
* @param model
* @param map
* key: currentPage 当前页码
* @return 跳转⾄列表页⾯
* @throws Exception
*/
@RequestMapping("/findUserList.do")
public String findUserList(@RequestParam Map<String, String> map, Model model) throws Exception { if (map.size() == 0 || ("currentPage").isEmpty()) {
map.put("currentPage", "0");
}
// 查询⽤户列表及设置分页信息
List<UserDTO> userDTOList = userServiceImpl.findUserDTOList();
// 参数为当前页码、每页显⽰条数、查询的列表集合
Pager pageInfo = new Pager(Integer.("currentPage")), 20, userDTOList);
model.addAttribute("userDTOList", List());
model.addAttribute("pageInfo", pageInfo);
return "findUserDTOList";
}
3. 前台页⾯展⽰
<table class="table">
<tr th:each="flpcDTO : ${userDTOList} ">
<td></td>
</tr>
</table>
<div align="center">
<a class="allpage"><b th:text="'共 '+ ${Pages()}+ ' 页'"></b></a>
<a th:href="@{/findUserList.do(currentPage=${FirstPage()})}" >⾸页</a>
<a th:if="${pageInfo.hasPreviousPage()} == true" th:href="@{/findUserList.do(currentPage=${PrePage()})}" >上⼀页</a>
<a th:href="@{'/findUserList.do?currentPage=' + ${i}}" th:each="i :${#numbers.sequence(pageInfo.firstPage, pageInfo.lastPage)}" th:text=" ${i}" th:class <a th:if="${pageInfo.hasNextPage()} == true" th:href="@{/findUserList.do(currentPage=${NextPage()})}" >下⼀页</a>
<a th:href="@{/findUserList.do(currentPage=${LastPage()})}" >尾页</a>
</div>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论