非数据库数据源的分页实现

由于在做项目时,需要对非数据库数据源进行分页展示。于是通过网上查找以及综合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("&laquo;"))
        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("&raquo;"))
        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分页工具类