注意:本工具是通过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?"待处理":"已处理");
//将数据重新填入表格
}
},
})
});