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部分就可以使用。
原文链接:https://blog.csdn.net/qq_41780372/article/details/85244571