jqGrid 滚动加载 或者点击分页加载两种方式
来源:互联网 发布:网络打印机老是脱机 编辑:程序博客网 时间:2024/05/30 04:04
分页的使用场景:当需要展示的字段太多,记录的条数太多的情况下,如果采用一次性加载全部的记录,会导致加载页面缓慢,响应速度慢, 影响系统的流程程度,故所以采用分页的方法加载数据是十分必要的
步骤如下:
jqgrid 分页的原理其实是以post 或get方式向后台发送了请求,携带的几个参数都是固定了,例如page,rows,total,...等等
这些参数需要被后台的Controller 获取到
下面是后台代码:
JavaScript Code
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
@ SuppressWarnings("unchecked")
@ RequestMapping(value = ApiUtil.loadMarketFunds, method = RequestMethod.POST)
public CallBack < BasicFund > loadMarketFundds(FundSelectRequest request, @ RequestParam(value = "rows", required = false)Integer rows,
@ RequestParam(value = "page", required = false)Integer page,
@ RequestParam(value = "sidx", required = false)String sidx,
@ RequestParam(value = "qwery", required = false)String qwery,
@ RequestParam(value = "sord", required = false)String sord)
{
System.out.println(" rows:" + rows + " page:" + page + " sidx:" + sidx + " sord:" + sord + " qwery:" + qwery);
System.out.println(request);
long t0 = System.currentTimeMillis();
//根据条件查找对应的全市场基金的基金经理
Map < String,
Object > resultMap = basicFundService.loadMarketFunds(request);
List < BasicFund > marketFunds = (List < BasicFund > )resultMap.get("filterList");
CallBack < BasicFund > back = handListPage(rows, page, sidx, sord, marketFunds);
long tx = System.currentTimeMillis();
log.debug("loadFundManages spend :" + (tx - t0));
return back;
}
/**
* jqGrid处理list分页的逻辑
* @param rows
* @param page
* @param sidx
* @param sord
* @param pageList
* @return
*/
private < T > CallBack < T > handListPage(Integer rows, Integer page, String sidx, String sord, List < T > pageList)
{
if (StringUtils.isNotBlank(sord) && StringUtils.isNotBlank(sidx))
{
SortUtil.sortByBeanFiled(pageList, sidx, sord);
}
Integer size = 0;
Integer totalPage = 0;
if (null != pageList && pageList.size() > 0)
{
size = pageList.size();
int by = size / rows;
totalPage = size % rows == 0 ? by : by + 1;
if (page > totalPage)
{
page = totalPage;
}
}
Integer startIndex = (page - 1) * rows;
Integer endIndex = page * rows;
List < T > subList = new ArrayList < > ();
if (null != pageList && pageList.size() > 0)
{
size = pageList.size();
if (startIndex > size)
{
startIndex = size - rows;
}
if (endIndex > size)
{
endIndex = size;
}
subList = pageList.subList(startIndex, endIndex);
}
return new CallBack < T > (size, page, totalPage, subList);
}
@ RequestMapping(value = ApiUtil.loadMarketFunds, method = RequestMethod.POST)
public CallBack < BasicFund > loadMarketFundds(FundSelectRequest request, @ RequestParam(value = "rows", required = false)Integer rows,
@ RequestParam(value = "page", required = false)Integer page,
@ RequestParam(value = "sidx", required = false)String sidx,
@ RequestParam(value = "qwery", required = false)String qwery,
@ RequestParam(value = "sord", required = false)String sord)
{
System.out.println(" rows:" + rows + " page:" + page + " sidx:" + sidx + " sord:" + sord + " qwery:" + qwery);
System.out.println(request);
long t0 = System.currentTimeMillis();
//根据条件查找对应的全市场基金的基金经理
Map < String,
Object > resultMap = basicFundService.loadMarketFunds(request);
List < BasicFund > marketFunds = (List < BasicFund > )resultMap.get("filterList");
CallBack < BasicFund > back = handListPage(rows, page, sidx, sord, marketFunds);
long tx = System.currentTimeMillis();
log.debug("loadFundManages spend :" + (tx - t0));
return back;
}
/**
* jqGrid处理list分页的逻辑
* @param rows
* @param page
* @param sidx
* @param sord
* @param pageList
* @return
*/
private < T > CallBack < T > handListPage(Integer rows, Integer page, String sidx, String sord, List < T > pageList)
{
if (StringUtils.isNotBlank(sord) && StringUtils.isNotBlank(sidx))
{
SortUtil.sortByBeanFiled(pageList, sidx, sord);
}
Integer size = 0;
Integer totalPage = 0;
if (null != pageList && pageList.size() > 0)
{
size = pageList.size();
int by = size / rows;
totalPage = size % rows == 0 ? by : by + 1;
if (page > totalPage)
{
page = totalPage;
}
}
Integer startIndex = (page - 1) * rows;
Integer endIndex = page * rows;
List < T > subList = new ArrayList < > ();
if (null != pageList && pageList.size() > 0)
{
size = pageList.size();
if (startIndex > size)
{
startIndex = size - rows;
}
if (endIndex > size)
{
endIndex = size;
}
subList = pageList.subList(startIndex, endIndex);
}
return new CallBack < T > (size, page, totalPage, subList);
}
JavaScript Code
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
public static < T > void sortByBeanFiled(List < T > list, String field, String order)
{
logger.debug("sort list...");
Integer d = order.equals(ASC) ? 1 : -1;
Collections.sort(list, new Comparator < T > ()
{
@ Override
public int compare(T t1, T t2)
{
if (null != t1 && null != t2)
{
String prop = null;
String newField = null;
Object value1 = null;
Object value2 = null;
//如果属性为复合类型Java属性
if (StringUtils.isNotBlank(field) && field.contains("."))
{
prop = field.substring(0, field.lastIndexOf("."));
newField = field.substring(field.lastIndexOf(".") + 1);
Object propBean1 = ReflectUtil.getTypeField(t1, prop);
Object propBean2 = ReflectUtil.getTypeField(t2, prop);
value1 = extractJavaBeanPropertyValue(prop, newField, propBean1);
value2 = extractJavaBeanPropertyValue(prop, newField, propBean2);
}
else
{
value1 = ReflectUtil.getTypeField(t1, field);
value2 = ReflectUtil.getTypeField(t2, field);
}
if (null == value1 && null != value2)
{
return -d;
}
else if (null != value1 && null == value2)
{
return d;
}
else if (null == value1 && null == value2)
{
return 0;
}
else if (null != value1 && null != value2)
{
Integer tempd = 0;
if (value1 instanceof String)
{
tempd = Collator.getInstance(Locale.CHINESE).compare(value1, value2);
}
else if (value1 instanceof Number || value1 instanceof Integer)
{
tempd = Integer.valueOf(String.valueOf(value1)) - Integer.valueOf(String.valueOf(value2));
}
else if (value1 instanceof Date)
{
try
{
tempd = DATE_FORMAT.parse(String.valueOf(value1)).compareTo(DATE_FORMAT.parse(String.valueOf(value2)));
}
catch (ParseException e)
{
logger.debug("sortByBeanFiled 日期转换异常");
e.printStackTrace();
}
}
else
{
logger.debug("sortByBeanFiled 转换其他类型:" + value1.getClass().getName());
}
if (tempd > 0)
{
return d;
}
else if (tempd < 0)
{
return -d;
}
return tempd;
}
}
return 0;
}
private Object extractJavaBeanPropertyValue(String prop, String newField, Object propBean)
{
Object value = null;
//忽略...
return value;
}
}
);
}
{
logger.debug("sort list...");
Integer d = order.equals(ASC) ? 1 : -1;
Collections.sort(list, new Comparator < T > ()
{
@ Override
public int compare(T t1, T t2)
{
if (null != t1 && null != t2)
{
String prop = null;
String newField = null;
Object value1 = null;
Object value2 = null;
//如果属性为复合类型Java属性
if (StringUtils.isNotBlank(field) && field.contains("."))
{
prop = field.substring(0, field.lastIndexOf("."));
newField = field.substring(field.lastIndexOf(".") + 1);
Object propBean1 = ReflectUtil.getTypeField(t1, prop);
Object propBean2 = ReflectUtil.getTypeField(t2, prop);
value1 = extractJavaBeanPropertyValue(prop, newField, propBean1);
value2 = extractJavaBeanPropertyValue(prop, newField, propBean2);
}
else
{
value1 = ReflectUtil.getTypeField(t1, field);
value2 = ReflectUtil.getTypeField(t2, field);
}
if (null == value1 && null != value2)
{
return -d;
}
else if (null != value1 && null == value2)
{
return d;
}
else if (null == value1 && null == value2)
{
return 0;
}
else if (null != value1 && null != value2)
{
Integer tempd = 0;
if (value1 instanceof String)
{
tempd = Collator.getInstance(Locale.CHINESE).compare(value1, value2);
}
else if (value1 instanceof Number || value1 instanceof Integer)
{
tempd = Integer.valueOf(String.valueOf(value1)) - Integer.valueOf(String.valueOf(value2));
}
else if (value1 instanceof Date)
{
try
{
tempd = DATE_FORMAT.parse(String.valueOf(value1)).compareTo(DATE_FORMAT.parse(String.valueOf(value2)));
}
catch (ParseException e)
{
logger.debug("sortByBeanFiled 日期转换异常");
e.printStackTrace();
}
}
else
{
logger.debug("sortByBeanFiled 转换其他类型:" + value1.getClass().getName());
}
if (tempd > 0)
{
return d;
}
else if (tempd < 0)
{
return -d;
}
return tempd;
}
}
return 0;
}
private Object extractJavaBeanPropertyValue(String prop, String newField, Object propBean)
{
Object value = null;
//忽略...
return value;
}
}
);
}
后台的js有两种风格
JavaScript Code
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
function initMarketFunds(opts) {
var width =null;
var hidden = $('#frmTitle').is(":hidden");
if(hidden){
width = $(window).width()-$('.pic-bg').width();
}else{
width =$(window).width()-$('#frmTitle').width()-$('.pic-bg').width();
}
getHeaderType(clickIndex);
var modelMap ={};
for(var className in selectMap){
var flag = selectMap[className];
if(flag){
modelMap[className] = clickIndex;
}
}
var defaults = buildRequestParams(true);
var settings = $.extend({}, defaults, opts);
var modelArr = loadModelHeader(modelMap);
$('#allFundsDiv').empty().html('<table id="market_table" width="100%"></table><div id="market_page" style="height:20px;"></div>');
//滚动分页的效果
/*$('#market_table').jqGrid({
url: 'loadMarketFunds.json',
mtype: "POST",
postData:settings,
datatype: "json",
colModel: modelArr,
page: 1,
rowNum: 100,
shrinkToFit: false,
viewrecords: true,
gridview: true,
sortname: 'secuCode',
sortable:false,
scroll: 1,
width:width,
height:600,
loadui: "Disable",
recordtext : "记录 {0} ~ {1} | 总记录数 {2}",//显示记录数的格式
emptyrecords : "无数据",//空记录时的提示信息
pgtext : "第几页 {0} 总页数 {1}",//页数显示格式
pager: "#market_page"
});*/
var width =null;
var hidden = $('#frmTitle').is(":hidden");
if(hidden){
width = $(window).width()-$('.pic-bg').width();
}else{
width =$(window).width()-$('#frmTitle').width()-$('.pic-bg').width();
}
getHeaderType(clickIndex);
var modelMap ={};
for(var className in selectMap){
var flag = selectMap[className];
if(flag){
modelMap[className] = clickIndex;
}
}
var defaults = buildRequestParams(true);
var settings = $.extend({}, defaults, opts);
var modelArr = loadModelHeader(modelMap);
$('#allFundsDiv').empty().html('<table id="market_table" width="100%"></table><div id="market_page" style="height:20px;"></div>');
//滚动分页的效果
/*$('#market_table').jqGrid({
url: 'loadMarketFunds.json',
mtype: "POST",
postData:settings,
datatype: "json",
colModel: modelArr,
page: 1,
rowNum: 100,
shrinkToFit: false,
viewrecords: true,
gridview: true,
sortname: 'secuCode',
sortable:false,
scroll: 1,
width:width,
height:600,
loadui: "Disable",
recordtext : "记录 {0} ~ {1} | 总记录数 {2}",//显示记录数的格式
emptyrecords : "无数据",//空记录时的提示信息
pgtext : "第几页 {0} 总页数 {1}",//页数显示格式
pager: "#market_page"
});*/
//点击分页的效果
$('#market_table').jqGrid({
url: 'loadMarketFunds.json',
mtype: "POST",
postData:settings,
datatype: "json",
colModel: modelArr,
rowList: [50,100,200],
sortname: 'secuCode',
rowNum: 100,
shrinkToFit: false,
viewrecords: true,
gridview: true,
sortable:false,
width:width,
height:600,
loadui: "Disable",
recordtext : "记录 {0} ~ {1} | 总记录数 {2}",//显示记录数的格式
emptyrecords : "无数据",//空记录时的提示信息
pgtext : "第几页 {0} 总页数 {1}",//页数显示格式
pager: "#market_page"
});
//处理多表头
$('#market_table').setGroupHeaders({
useColSpanStyle: true,
groupHeaders: [{ "numberOfColumns": 4, "titleText": "最新资产配置(%)", "startColumnName": "stockRatio" }]
});
jQuery("#market_table").jqGrid('setFrozenColumns');
suitWindows('#market_table', '#allFundsDiv', '#market_page');
}
$('#market_table').jqGrid({
url: 'loadMarketFunds.json',
mtype: "POST",
postData:settings,
datatype: "json",
colModel: modelArr,
rowList: [50,100,200],
sortname: 'secuCode',
rowNum: 100,
shrinkToFit: false,
viewrecords: true,
gridview: true,
sortable:false,
width:width,
height:600,
loadui: "Disable",
recordtext : "记录 {0} ~ {1} | 总记录数 {2}",//显示记录数的格式
emptyrecords : "无数据",//空记录时的提示信息
pgtext : "第几页 {0} 总页数 {1}",//页数显示格式
pager: "#market_page"
});
//处理多表头
$('#market_table').setGroupHeaders({
useColSpanStyle: true,
groupHeaders: [{ "numberOfColumns": 4, "titleText": "最新资产配置(%)", "startColumnName": "stockRatio" }]
});
jQuery("#market_table").jqGrid('setFrozenColumns');
suitWindows('#market_table', '#allFundsDiv', '#market_page');
}
JavaScript Code
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/**
* Java 反射获取对应字段的值
* @param <V>
*
* @param fund
* @param field
* @return
*/
@ SuppressWarnings("unchecked")
public static < T, V > V getTypeField(T t, String field)
{
if (StringUtils.isNotBlank(field))
{
Class < ? > clazz = t.getClass();
try
{
Field f = clazz.getDeclaredField(field);
f.setAccessible(true);
return (V)f.get(t);
}
catch (Exception e)
{
throw new BizException(ErrorCodeEnum.REFLECT_FAILED, "反射获取字段值异常");
}
}
return null;
}
* Java 反射获取对应字段的值
* @param <V>
*
* @param fund
* @param field
* @return
*/
@ SuppressWarnings("unchecked")
public static < T, V > V getTypeField(T t, String field)
{
if (StringUtils.isNotBlank(field))
{
Class < ? > clazz = t.getClass();
try
{
Field f = clazz.getDeclaredField(field);
f.setAccessible(true);
return (V)f.get(t);
}
catch (Exception e)
{
throw new BizException(ErrorCodeEnum.REFLECT_FAILED, "反射获取字段值异常");
}
}
return null;
}
效果如下:
阅读全文
0 0
- jqGrid 滚动加载 或者点击分页加载两种方式
- jqgrid加载本地数据分页
- jqgrid标题换行、隐藏滚动条、重新提交数据加载页面、单元格绑定点击事件
- 两种方式加载配置文件
- UIImage两种加载方式
- 两种加载数据库方式
- jqgrid 加载本地数据local 如何分页
- js滚动分页加载数据
- 【Jfinal】分页 Ajax点击加载
- JNI加载dll两种方式
- 加载图标的两种方式
- 两种图片加载方式的区别
- 页面加载JS两种方式
- IOS加载视图的两种方式
- 加载DLL文件 两种方式
- Spring加载配置文件的两种方式
- 两种内容加载显示方式
- CtreeCtrl加载图标的两种方式
- [区块链]Hyperledger Fabric源代码(基于v1.0 beta版本)阅读之乐扣老师解读系列 (五)BSSCP包之SW加密包
- 最小公倍数
- Web.xml配置解析(一)
- ROS开发项目技术贴
- Tomcat中两个不同项目共享Session
- jqGrid 滚动加载 或者点击分页加载两种方式
- dumpsys命令用法
- mysql常用函数
- Android常用框架
- webpack入门指南
- 学习mybatis源码疑惑一
- 消息队列(待完善)
- 串口编程的VTIME与VMIN的配置
- VueJS--给组件绑定原生事件