非数据库数据源的分页实现
由于在做项目时,需要对非数据库数据源进行分页展示。于是通过网上查找以及综合mybais的分页插件,编写了一个分页工具类。
1、工具类MyPager.java
import java.util.ArrayList;
import java.util.List;
public class MyPager<T> {
// 需要传入分页的数据集合
private List<T> dataList;
// 当前页号
private int currentPages;
// 每页条数
private int size;
// 分页后的返回集合
private List<T> resultsList;
// 页数
private int pages;
// 记录条数
private int recordCount;
// 上一页序号
private int prePageIndex;
// 下一页序号
private int nextPageIndex;
// 是否第一页
private boolean firstPage;
// 是否最后一页
private boolean lastPage;
//是否有前一页
private boolean hasPreviousPage = false;
//是否有下一页
private boolean hasNextPage = false;
//所有导航页号
private int[] navigatepageNums;
public int getCurrentPages() {
return currentPages;
}
public void setCurrentPages(int currentPages) {
this.currentPages = currentPages;
}
public List<T> getDataList() {
return dataList;
}
public void setDataList(List<T> dataList) {
this.dataList = dataList;
// 计算条数
recordCount = dataList.size();
// 计算页数
/*if (recordCount % size == 0) {
pages = recordCount / size;
} else {
pages = recordCount / size + 1;
}*/
pages=(int)Math.ceil(Double.valueOf(recordCount)/Double.valueOf(size));
//是否有下一页
if (currentPages>1){
hasPreviousPage=true;
}else {
hasPreviousPage=false;
}
if (currentPages<pages){
hasNextPage=true;
}else {
hasNextPage=false;
}
navigatepageNums = new int[pages];
for (int i = 0; i < pages; i++) {
navigatepageNums[i] = i + 1;
}
// 上一页,下一页确定
if(currentPages>1){
prePageIndex = currentPages - 1;
}
if (currentPages<pages){
nextPageIndex = currentPages + 1;
}
// 是否第一页,最后一页
if (currentPages == 1) {
firstPage = true;
} else {
firstPage = false;
}
if (currentPages == pages) {
lastPage = true;
} else {
lastPage = false;
}
// 筛选工作
resultsList = new ArrayList<T>();
for (int i = (currentPages - 1) * size; i < currentPages * size && i < recordCount; i++) {
resultsList.add(dataList.get(i));
}
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public List<T> getResultsList() {
return resultsList;
}
public void setResultsList(ArrayList<T> resultsList) {
this.resultsList = resultsList;
}
public int getPages() {
return pages;
}
public void setPages(int pages) {
this.pages = pages;
}
public int getRecordCount() {
return recordCount;
}
public void setRecordCount(int recordCount) {
this.recordCount = recordCount;
}
public int getNextPageIndex() {
return nextPageIndex;
}
public void setNextPageIndex(int nextPageIndex) {
this.nextPageIndex = nextPageIndex;
}
public int getPrePageIndex() {
return prePageIndex;
}
public void setPrePageIndex(int prePageIndex) {
this.prePageIndex = prePageIndex;
}
public boolean isFirstPage() {
return firstPage;
}
public void setFirstPage(boolean firstPage) {
this.firstPage = firstPage;
}
public boolean isLastPage() {
return lastPage;
}
public void setLastPage(boolean lastPage) {
this.lastPage = lastPage;
}
public boolean isHasPreviousPage() {
return hasPreviousPage;
}
public void setHasPreviousPage(boolean hasPreviousPage) {
this.hasPreviousPage = hasPreviousPage;
}
public boolean isHasNextPage() {
return hasNextPage;
}
public void setHasNextPage(boolean hasNextPage) {
this.hasNextPage = hasNextPage;
}
public int[] getNavigatepageNums() {
return navigatepageNums;
}
public void setNavigatepageNums(int[] navigatepageNums) {
this.navigatepageNums = navigatepageNums;
}
}
2、controller层的数据传入并返回前端
MyPager<Market> pager = new MyPager<>();
pager.setCurrentPages(page);
pager.setSize(3);
pager.setDataList(marketList);
pager.getRecordCount();
//获得分页结果
pager.getResultsList();
//传至前端
return Msg.success().add("info",pager);
3、前端既可通过获得的各个属性进行分页的构建。附上我自己的构建代码
$(function () {
to_page(1)
});
function to_page(num) {
$.ajax({
url: "${pageContext.request.contextPath}/financialController/pageData",
data: {
page: num
},
type: "get",
success: function (result) {
build_table(result)
buid_page_info(result)
build_page_nav(result)
}
});
}
function build_table(result) {
$("#tb tbody").empty()
var glass = result.data.info.resultsList;
$.each(glass, function (index, item) {
var orderId = $("<th></th>").append(item.id).attr("id", "orderId")
var money = $("<th></th>").append(item.money).attr("id", "money")
$("<tr></tr>").append(orderId).append(money).appendTo("#tb tbody")
})
}
function build_page_nav(result) {
$("#info").empty()
$("#info").append(" 当前" + result.data.info.currentPages + "页,共" + result.data.info.pages + "页,共" + result.data.info.recordCount + "条记录")
}
function buid_page_info(result) {
$("#pageNum").empty()
var firstPageLi = $("<li></li>").append($("<a></a>").append("首页").attr("href", "#"))
var prePageLi = $("<li></li>").append($("<a></a>").append("«"))
if (result.data.info.hasPreviousPage == false) {
firstPageLi.addClass("am-disabled")
prePageLi.prop("style","display:none")
}
firstPageLi.click(function () {
to_page(1)
})
prePageLi.click(function () {
to_page(result.data.info.prePageIndex)
})
var nextPageLi = $("<li></li>").append($("<a></a>").append("»"))
var lastPageLi = $("<li></li>").append($("<a></a>").append("末页").attr("href", "#"))
if (result.data.info.hasNextPage == false) {
nextPageLi.prop("style","display:none")
lastPageLi.addClass("am-disabled")
}
nextPageLi.click(function () {
to_page(result.data.info.nextPageIndex)
})
lastPageLi.click(function () {
to_page(result.data.info.pages)
})
$("#pageNum").append(firstPageLi).append(prePageLi)
$.each(result.data.info.navigatepageNums, function (index, item) {
var numLi = $("<li></li>").append($("<a></a>").append(item))
if (result.data.info.currentPages == item) {
numLi.addClass("am-active")
}
numLi.click(function () {
to_page(item)
})
$("#pageNum").append(numLi)
})
$("#pageNum").append(nextPageLi).append(lastPageLi)
}
更多推荐
Java分页工具类
发布评论