【JqGrid】JqGrid使用后台分页+查询条件+排序

比眉伴天荒 2022-07-14 06:20 792阅读 0赞

最近做项目时要用到jqGrid,先学习了一下jqGrid的使用方法,现总结如下,先从基本的说起:
1、数据显示:

jqGrid可以解析的数据有很多种,如xml、json等,在这个项目中主要用的就是json数据解析,JqGrid查询时和后台交互是很简单的,但是必须注意几个地方,废话少说,我直接上代码:

JSP代码如下:

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
  4. <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  6. <%
  7. String path = request.getContextPath();
  8. %>
  9. <html>
  10. <head>
  11. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  12. <title>团客人名单列表</title>
  13. <%@ include file="../../../include/top.jsp"%>
  14. <script type="text/javascript">
  15. $(function() {
  16. var vars={
  17. dateFrom : $.currentMonthFirstDay(),
  18. dateTo : $.currentMonthLastDay()
  19. };
  20. $("input[name='startTime']").val(vars.dateFrom);
  21. $("input[name='endTime']").val(vars.dateTo );
  22. });
  23. </script>
  24. <link rel="stylesheet" href="<%=staticPath %>/assets/js/jqgrid/css/ui.jqgrid.css" rel="stylesheet">
  25. <script src="<%=staticPath %>/assets/js/jqgrid/js/i18n/grid.locale-cn.js"></script>
  26. <script src="<%=staticPath %>/assets/js/jqgrid/js/jquery.jqGrid.min.js"></script>
  27. </head>
  28. <body>
  29. <div class="p_container">
  30. <form id="groupOrderGuestForm" method="post">
  31. <input type="hidden" name="page" id="page" value="${pageBean.page }"/>
  32. <input type="hidden" name="pageSize" id="pageSize" value="${pageBean.pageSize }"/>
  33. <input type="hidden" name="userRightType" id="userRightType" value="${userRightType}"/>
  34. <div class="p_container_sub">
  35. <div class="searchRow">
  36. <ul>
  37. <li class="text"> 日期:</li>
  38. <li >
  39. <input name="startTime" id="startTime" type="text" class="Wdate" onClick="WdatePicker({dateFmt:'yyyy-MM-dd'})"/>
  40. ~
  41. <input name="endTime" id="endTime" type="text" class="Wdate" onClick="WdatePicker({dateFmt:'yyyy-MM-dd'})" />
  42. </li>
  43. <li class="text">客人信息:</li>
  44. <li >
  45. <input type="text" name="receiveMode" id="receiveMode" value=""/>
  46. </li>
  47. <li class="text"> 团号:</li>
  48. <li>
  49. <input type="text" name="groupCode" id="groupCode" value=""/>
  50. </li>
  51. <li class="text">平台来源:</li>
  52. <li>
  53. <input name="supplierName" id="supplierName" type="text"/>
  54. </li>
  55. </ul>
  56. <ul>
  57. <li class="text" ">部门:</li>
  58. <li>
  59. <input type="text" name="orgNames" id="orgNames" stag="orgNames"readonly="readonly" οnclick="showOrg()" style="width: 185px;"/>
  60. <input type="hidden" name="orgIds" id="orgIds" stag="orgIds" />
  61. </li>
  62. <li class="text" ">
  63. <select name="operType" id="operType" >
  64. <option value="1">客服</option>
  65. <option value="2">计调</option>
  66. <option value="3">输单员</option>
  67. </select>
  68. </li>
  69. <li>
  70. <input type="text" name="saleOperatorName" id="saleOperatorName" stag="userNames" readonly="readonly" οnclick="showUser()"/>
  71. <input name="saleOperatorIds" id="saleOperatorIds" stag="userIds" type="hidden" />
  72. </li>
  73. <li class="text"> 产品类型:</li>
  74. <li >
  75. <input type="text" id="dicNames" readonly="readonly" οnclick="commonDicDlg()"/>
  76. <input type="hidden" name="orderNo" id="dicIds" />
  77. </li>
  78. <li class="text"> 产品套餐:</li>
  79. <li >
  80. <input type="text" name="remark" id="remark" value=""/>
  81. </li>
  82. </ul>
  83. <ul>
  84. <li class="text" >姓名:</li>
  85. <li >
  86. <input type="text" name="guestName" id="guestName" value="" style="width: 185px;"/>
  87. </li>
  88. <li class="text">性别:</li>
  89. <li class="text" ">
  90. <select name="gender" id="gender" style="width: 80px;">
  91. <option value="">全部</option>
  92. <option value="1"></option>
  93. <option value="0"></option>
  94. </select>
  95. </li>
  96. <li class="text" style="width: 140px;"> 年龄:</li>
  97. <li >
  98. <input type="text" name="ageFirst" id="ageFirst" value="" style="width: 60px;"/>
  99. ~
  100. <input type="text" name="ageSecond" id="ageSecond" value="" style="width: 60px;"/>
  101. </li>
  102. <li class="text">籍贯:</li>
  103. <li >
  104. <input type="text" name="nativePlace" id="nativePlace" value=""/>
  105. </li>
  106. <li style="margin-left: 20px;">
  107. <button type="button" οnclick="searchBtn()" class="button button-primary button-small">查询</button>
  108. <button type="button" οnclick="toPickUpExcel()" class="button button-primary button-small">导出地接单</button>
  109. <button type="button" οnclick="toInsuranceExcel()" class="button button-primary button-small">导出保险单 </button>
  110. <a href="javascript:void(0);" id="toGuestListExcelId" target="_blank" οnclick="toGuestListExcel()" class="button button-primary button-small">导出到Excel</a>
  111. </li>
  112. </ul>
  113. </div>
  114. </div>
  115. </form>
  116. </div>
  117. <!-- 以上是查询的条件 -->
  118. <!-- JqGrid -->
  119. <div class="p_container" >
  120. <div class="jqGrid_guest">
  121. <!-- JqGrid Table-->
  122. <table id="contentGroupOrderTable"></table>
  123. <!-- JqGrid page-->
  124. <div id="pagerGroupOrder"></div>
  125. </div>
  126. </div>
  127. <script src="<%=staticPath %>/assets/js/moment.js"></script>
  128. <script src="<%=staticPath %>/assets/js/accounting.min.js"></script>
  129. <script type="text/javascript">
  130. $(function(){
  131. opGrid.loadGrid();
  132. $("#contentGroupOrderTable").setGridParam({datatype:'json', page:1}).trigger('reloadGrid');
  133. //opGrid.reSize();
  134. /* $(window).bind('resize', function () {
  135. opGrid.reSize();
  136. }); */
  137. });
  138. var opGrid = {//组装查询的条件参数
  139. /* reSize: function(){
  140. var width = $('.jqGrid_wrapper').width();
  141. var height = $(window).height();
  142. var searchBox=80, jqGrid_head = 55, jqGrid_pager = 30, jqGrid_footer = 45;
  143. height = height - searchBox - jqGrid_head - jqGrid_pager - jqGrid_footer;
  144. $('#contentGroupOrderTable').setGridWidth(width);
  145. $('#contentGroupOrderTable').setGridHeight(height - 10);
  146. }, */
  147. getParam: function(){
  148. var rowListNum = $("#contentGroupOrderTable").jqGrid('getGridParam', 'rowNum');
  149. if(rowListNum == undefined){
  150. $('#pageSize').val(15);
  151. }else{
  152. $('#pageSize').val(rowListNum);
  153. }
  154. //组装查询的条件参数
  155. var params = {'startTime':$("#startTime").val()
  156. , 'endTime':$("#endTime").val()
  157. , 'supplierName':$("#supplierName").val()
  158. , 'groupCode':$("#groupCode").val()
  159. ,'receiveMode':$("#receiveMode").val()
  160. ,'orgNames':$("#orgNames").val()
  161. ,'orgIds':$("#orgIds").val()
  162. ,'saleOperatorName':$("#saleOperatorName").val()
  163. ,'saleOperatorIds':$("#saleOperatorIds").val()
  164. ,'productName':$("#productName").val()
  165. ,'remark':$("#remark").val()
  166. ,'operType':$("#operType").val()
  167. ,'guestName':$("#guestName").val()
  168. ,'gender':$("#gender").val()
  169. ,'ageFirst':$("#ageFirst").val()
  170. ,'ageSecond':$("#ageSecond").val()
  171. ,'nativePlace':$("#nativePlace").val()
  172. ,'pageSize':$("#pageSize").val()
  173. ,'userRightType':$("#userRightType").val()
  174. };
  175. return params;
  176. },
  177. //对金融的处理,除以人数
  178. formatPerson:function(v,o,r){
  179. return v/(r.num_adult+r.num_child);
  180. },
  181. /* formatOrderMode:function(v,o,r){
  182. return v;
  183. }, */
  184. //对性别的处理
  185. formatGender:function(v,o,r){
  186. if(v == 0 ){
  187. return '女';
  188. }else{
  189. return '男';
  190. }
  191. },
  192. //table数据
  193. loadGrid: function(){
  194. $("#contentGroupOrderTable").jqGrid({
  195. url: 'groupOrderGuestDataList.do',
  196. datatype: "json",
  197. mtype : "post",
  198. //height: 250,
  199. height: "100%",
  200. autowidth: false,
  201. shrinkToFit: false,
  202. rownumbers:true,
  203. rowNum: 15,
  204. rowList: [15, 30, 50, 100, 500, 1000],
  205. //colNames: ['团号', '发团日期', '平台来源', '客人信息', '姓名', '性别',
  206. // '年龄','证件号','电话','籍贯','产品套餐','业务','销售','计调','金额'],
  207. colModel: [
  208. {label:'团号',name: 'group_code',index: 'groupCode',width: 130, sortable: false, align:'left'},
  209. {label:'发团日期',name: 'departure_date',index: 'departure_date',align: "center",formatter:function(cellValue,options,rowObject){
  210. return (moment(rowObject.departure_date).format("YYYY-MM-DD"));},width: 100, align:'center',formatoptions:''},
  211. {label:'平台来源',name: 'supplier_name',index: 'supplier_name',width: 60, sortable: false, align:'left'},
  212. {label:'客人信息',name: 'receive_mode',index: 'receive_mode',width: 200, sortable: false, align:'left'},
  213. {label:'姓名',name: 'name',index: 'name',width: 80, sortable: false,align:'center'},
  214. {label:'性别',name: 'gender',index: 'gender',width: 50, sortable: false, align:'center',formatter:opGrid.formatGender},
  215. {label:'年龄',name: 'age',index: 'age',width: 50, align:'center'},
  216. {label:'证件号',name: 'certificate_num',index: 'certificate_num',width: 150, sortable: false, align:'center'},
  217. {label:'电话',name: 'mobile',index: 'mobile',width: 110, sortable: false, align:'center'},
  218. {label:'籍贯',name: 'native_place',index: 'native_place',width: 120, sortable: false, align:'left'},
  219. {label:'产品套餐',name: 'remark',index: 'remark',width: 300, sortable: false, align:'left'},
  220. {label:'业务',name: 'order_mode',index: 'order_mode',width: 70, sortable: false, align:'center', formatter:'select', formatoptions:{
  221. value:{ '1374':'长线',1475:'短线', '1476':'签证', '1486':'门票', '1487':'酒店', '1488':'专线', '1489':'包车', '1490':'组团', '1493':'推广', '1555':'石林九乡'}
  222. }
  223. },
  224. {label:'销售',name: 'sale_operator_name',index: 'sale_operator_name',width: 80, sortable: false, align:'center'},
  225. {label:'计调',name: 'operator_name',index: 'operator_name',width: 50, sortable: false, align:'center'},
  226. {label:'金额',name: 'total',index: 'total',width: 60, align:'center', formatter:opGrid.formatPerson}
  227. ],
  228. //sortable:true,
  229. //sortname: 'departure_date',
  230. //sortorder: 'asc',
  231. pager: "#pagerGroupOrder",
  232. viewrecords: true,
  233. caption: "",
  234. jsonReader:{//分页的关键
  235. id: "group_id",
  236. root: "result",total: "totalPage",page: "pageBean",records: "totalCount",repeatitems: false
  237. },
  238. postData:opGrid.getParam(),
  239. footerrow: true,
  240. loadComplete:function(xhr){
  241. //查询为空的处理方式
  242. var rowNum = $("#contentGroupOrderTable").jqGrid('getGridParam','records');
  243. if (rowNum == '0'){
  244. if($("#norecords").html() == null)
  245. $("#contentGroupOrderTable").parent().append("</pre><div id='norecords' style='text:center;padding: 8px 8px;'>没有查询记录!</div><pre>");
  246. $("#norecords").show();
  247. }else{
  248. $("#norecords").hide();
  249. }
  250. }
  251. //,onSortCol: function (index, colindex, sortorder)
  252. //{
  253. /* 列排序事件,向server传值,值为当前的页数,可以传递多个参数。
  254. index, colindex, sortorder三个值可以不设值。 */
  255. //jQuery("#contentGroupOrderTable").jqGrid('setGridParam',{page:$('#page').val()});
  256. //}
  257. });
  258. }
  259. }
  260. function searchBtn() {
  261. //前端分页先将datatype会变成local,所以必须先将其变为Json,点击查询按钮时才不会触发两次,就可以一次性加载数据了
  262. $("#contentGroupOrderTable").setGridParam({datatype:'json', page:1}).jqGrid('setGridParam', {page:1, postData: opGrid.getParam()}).trigger("reloadGrid");
  263. }
  264. </script>
  265. </body>
  266. <%@ include file="/WEB-INF/views/component/org-user/org_user_multi.jsp"%>
  267. </html>

特别说明:

(1)、不需要添加loadonce: true和sorttype:’text’这两个属性。

(2)、按钮查询不需要这样写:

  1. function searchBtn() {
  2. //前端分页先将datatype会变成local,所以必须先将其变为Json,点击查询按钮时才不会触发两次,就可以一次性加载数据了
  3. $("#contentGroupOrderTable").setGridParam({datatype:'json', page:1}).jqGrid('setGridParam', {page:1, postData: opGrid.getParam()}).trigger("reloadGrid");
  4. }

只需要这样写就行:

  1. function searchBtn() {
  2. $("#contentGroupOrderTable").jqGrid('setGridParam', {page:1, postData: opGrid.getParam()}).trigger("reloadGrid");
  3. }

2、后台controller这可以直接这样获取到排序的字段和排序方式:

  1. String sidx = request.getParameter("sidx");//来获得排序的列名,
  2. String sord = request.getParameter("sord");//来获得排序方式

获取值后将其传入SQL语句中啦。但是SQL语句中接受参数的地方不能使用“#”,而是使用“$”符号。

  1. <if test="sidx != null and sidx != ''">
  2. order by ${sidx} ${sord}
  3. </if>

3、需要将loadGrid中添加属性rowNum: 15,在controller控制层方法中带上参数Integer rows,将这个参数传入PageSize,即:

  1. pageBean.setPageSize(rows);

满足以上内容就可以将数据从数据库查询出来以JSON的数据格式传入页面,就可以进行分页、排序、查询啦!

发表评论

表情:
评论列表 (有 0 条评论,792人围观)

还没有评论,来说两句吧...

相关阅读