JAVA API数据接口分页排序工具 -java代码分页-jqgrid解析json数据并展示

注意:本工具是通过java代码进行数据分页,每次分页需要查询出满足条件的全部数据,再进行分页。数据量大的情况下不推荐使用。同时建议将数据进行缓存处理。

以下两个类均是之前在网上看见的,通过简单修改整理将两个类结合在一起使用。

排序工具ListSortUtil.java

package com.*.utils;


import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class ListSortUtil<T> {
    //数组排序的方法
    //传入list  传入排序字段 传入是否升序
    public List<T> sort(List<T> list, final String  sortField, final Boolean Ascending){

        Collections.sort(list, new Comparator<T>() {//排序
            @Override
            public int compare(T o1, T o2) {
                int retVal=0;
                //首字母转大写
                String newStr=sortField.substring(0, 1).toUpperCase()+sortField.replaceFirst("\\w","");
                String methodStr="get"+newStr;
                try {
                    Method method1 = ((T) o1).getClass().getMethod(methodStr, null);
                    Method method2 = ((T) o2).getClass().getMethod(methodStr, null);
                    //获取返回值类型  Type t = method.getAnnotatedReturnType().getType();
                    //返回值为数字和字符串使用不同的比较方法  
                    if(isStr2Num(method2.invoke(((T) o1), null).toString())){//判断值能否转数字
                        retVal = Integer.parseInt(method2.invoke(((T) o2), null).toString())-Integer.parseInt(method1.invoke(((T) o1), null).toString()); // 倒序
                    }else{
                        retVal = method2.invoke(((T) o2), null).toString().compareTo(method1.invoke(((T) o1), null).toString()); // 倒序
                    }
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                } catch (InvocationTargetException e) {
                    e.printStackTrace();
                } catch (NoSuchMethodException e) {
                    e.printStackTrace();
                }
                if (Ascending) {
                    return 0-retVal;
                } else {
                    return retVal;
                }
            }
        });
        return list;
    }


    /**
     * 查看一个字符串是否可以转换为数字
     * @param str 字符串
     * @return true 可以; false 不可以
     *
     */
    public  boolean isStr2Num(String str) {
        try {
            Integer.parseInt(str);
            return true;
        } catch (NumberFormatException e) {
            return false;
        }
    }

}

分页工具ListPageUtil.java

package com.*.pojo;


import com.*.utils.ListSortUtil;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class  ListPageUtil<T> {
    /**原集合*/
    private List<T> data;
    /** 上一页 */
    private int lastPage;
    /** 当前页 */
    private int nowPage;
    /** 下一页 */
    private int nextPage;
    /** 每页条数 */
    private int pageSize;
    /** 总页数 */
    private int totalPage;
    /** 总数据条数 */
    private int totalCount;

    public ListPageUtil(List<T> data,Integer nowPage,Integer pageSize,String sort,String sortkey) {
        Boolean sorts=true;
        String sortskey="id";
        if (data == null ) {
            data=new ArrayList<>();
        }
        if(nowPage==null){
            nowPage=1;
        }

        if(pageSize==null){
            pageSize=10;
        }

        if(sort!=null&&sort.equalsIgnoreCase("desc")){
            sorts=false;
        }

        if(sortkey!=null&&!sortkey.equals("")){
            sortskey=sortkey;
        }

        ListSortUtil<T> sortUtil=new ListSortUtil<>();
        try{
            data=sortUtil.sort(data,sortskey,sorts);
        }catch (Exception e){

        }

        this.data = data;
        this.pageSize = pageSize;
        this.nowPage = nowPage;
        this.totalCount = data.size();
        this.totalPage = (totalCount + pageSize - 1) / pageSize;
        this.lastPage = nowPage-1>1? nowPage-1:1;
        this.nextPage = nowPage>=totalPage? totalPage: nowPage + 1;

    }

   

    public int getPageSize() {
        return pageSize;
    }

    public List<T> getData() {
       // return data;
        int fromIndex = (nowPage - 1) * pageSize;
        if (fromIndex >= data.size()) {
            return Collections.emptyList();//空数组
        }
        if(fromIndex<0){
            return Collections.emptyList();//空数组
        }
        int toIndex = nowPage * pageSize;
        if (toIndex >= data.size()) {
            toIndex = data.size();
        }
        return data.subList(fromIndex, toIndex);
    }
    public int getLastPage() {
        return lastPage;
    }

    public int getNowPage() {
        return nowPage;
    }

    public int getNextPage() {
        return nextPage;
    }

    public int getTotalPage() {
        return totalPage;
    }

    public int getTotalCount() {
        return totalCount;
    }

 

    public ListPageUtil() {
    }

    public void setData(List<T> data) {
        this.data = data;
    }

    public void setLastPage(int lastPage) {
        this.lastPage = lastPage;
    }

    public void setNowPage(int nowPage) {
        this.nowPage = nowPage;
    }

    public void setNextPage(int nextPage) {
        this.nextPage = nextPage;
    }

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

    public void setTotalPage(int totalPage) {
        this.totalPage = totalPage;
    }

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

使用演示:
 

List<User> list = userService.list();// 待排序的数据
//依次传入:待排序数据  页码  数据条数 排序方式 排序字段
//例如:list  1  30 desc id
//将list集合通过id字段排序,获取第一页的数据,每页数据为30条,
//字段根据实体类,只要User里面有id字段并且有get个set方法即可,get和set建议自动生成避免出错。 
ListPageUtil<User> listPageUtil = new ListPageUtil<User>(list, page, rows, sord, sidx);

返回数据:

{"data":[{"id":12,"type":"商品异常","context":"111","contacts":"68****85","code":1,"uid":2,"username":"123456"}],"lastPage":1,"nowPage":2,"nextPage":2,"pageSize":10,"totalPage":2,"totalCount":11}


data:返回的数据
lastPage:上一页页码
nextPage:下一页页码
nowPage:当前页码
pageSize:每页条数
totalCount:共有多少条数据
totalPage:共有多少页
通过分页工具分页后的数据,使用jqgrid表格展示数据非常方便,这里提供部分代码,记得引入相关js和css。
详细教程还请参考官方文档,大家也可以直接使用hadmin后台模板,找到jqgrid表格,直接修改js部分就可以使用。

hadmin演示地址http://demo.mycodes.net/houtai/hAdmin/


<div class="ibox-content">
      <div class="jqGrid_wrapper">
           <table id="table_list_2"></table>
           <div id="pager_list_2" style="width: 100%"></div>
      </div>
</div>

js代码

 $.jgrid.defaults.styleUI = "Bootstrap";
        $("#table_list_2").jqGrid({
            height: 434, autowidth: true, shrinkToFit: true, /*  autoScroll: false, *//*forceFit: true, */
            colNames: ["id", "类型", "反馈内容", "联系方式", "用户id", "用户名","状态","操作"],
            colModel: [{name: "id", index: "id", autowidth: true, align: "center"},
                {name: "type", index: "type", autowidth: 150, align: "center"},
                {name: "context", index: "context", autowidth: 50, align: "center"},
                {name: "contacts", index: "contacts", autowidth: 50, align: "center"},
                {name: "uid", index: "context", autowidth: 50, align: "center"},
                {name: "username", index: "username", autowidth: 50, align: "center"},
                {name: "code", index: "type", autowidth: 150, align: "center"},
                {name: "edit", index: "edit", autowidth: 100, align: "center"}
            ],
            pager: "#pager_list_2",
            viewrecords: true, hidegrid: false,
            url: "/admin/feedback/list",//获取数据的api接口
            datatype: 'json',
            rownumbers: true,
            rowNum: 10,
            rowList: [10, 15, 30],//分页条数(支持切换)
            jsonReader: {
                root: "data", page: "nowPage", total: "totalPage",          //   很重要 定义了 后台分页参数的名字。
                records: "totalCount", repeatitems: false, id: "id"
            },
            gridComplete: function () {         // 数据加载完成后 对数据进行替换 比如将表格内0和1替换为是否或者将时间戳替换为时间等
//下面演示添加按钮和将数据0和1替换的方法
                var ids = jQuery("#table_list_2").jqGrid('getDataIDs');
                for (var i = 0; i < ids.length; i++) {
                    var id = ids[i];
                    var editBtn = "<button style='margin-left: 5px' class=\"btn btn-primary\"  onclick='deletes(" + id + ")' >删除</button> <a data-toggle=\"modal\" class=\"btn btn-primary\" onclick='updateu(" + id + ",0)' >处理</a>";
                    jQuery("#table_list_2").jqGrid('setRowData', ids[i], {edit: editBtn});

                    var codes=$("#table_list_2").jqGrid("getCell",ids[i],"code");//取出表格中的数据
                     $("#table_list_2").jqGrid("setCell",ids[i],"code",codes==1?"待处理":"已处理");
//将数据重新填入表格

                }
            },
        })
    });

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值