前端分页神器,jquery grid的使用(前后端联调),让分页变得更简单。
jquery grid 是一款非常好用的前端分页插件,下面来讲讲怎么使用。
首先需要引入jquery grid 的CSS和JS (我们使用的是bootstrap的样式)
下面我们通过一个例子来讲解,需求是:查询用户列表(支持分页功能)。
一、前端
html页面
js
// 定义举报列表对象
var userList = function () { // 举报列表
var handleUserList = function() { var jqGrid = $("#usersList");
jqGrid.jqGrid({
caption: "短视频用户列表", //标题
url: "/video/user/queryUser", //请求的url
mtype: "post", //请求方式
styleUI: "Bootstrap",//设置jqgrid的全局样式为bootstrap样式
datatype: "json",
colNames: ['ID', '头像', '用户名', '昵称', '粉丝数', '关注数', '获赞数'],
colModel: [ //这里的name的值必须和pojo中的属性对应
{ name: 'id', index: 'id', width: , sortable: false, hidden: false },
{ name: 'faceImage', index: 'faceImage', width: , sortable: false,
formatter:function(cellvalue, options, rowObject) {
var src = cellvalue; //cellvalue是存在数据库中的相对路径
var img = "<img src='" + src + "' width='100'></img>"
return img;
}
},
{ name: 'username', index: 'username', width: , sortable: false },
{ name: 'nickname', index: 'nickname', width: , sortable: false },
{ name: 'fansCounts', index: 'fansCounts', width: , sortable: false },
{ name: 'followCounts', index: 'followCounts', width: , sortable: false },
{ name: 'receiveLikeCounts', index: 'receiveLikeCounts', width: , sortable: false, hidden: false }
],
viewrecords: true, // 定义是否要显示总记录数
rowNum:, // 在grid上显示记录条数(每一页显示的记录数),这个参数是要被传递到后台 (需要需要的是,后台对应的参数名是rows 而不是 pageSize)
rownumbers: true, // 如果为ture则会在表格左边新增一列,显示行顺序号,从1开始递增。此列名为'rn'
autowidth: true, // 如果为ture时,则当表格在首次被创建时会根据父元素比例重新调整表格宽度。如果父元素宽度改变,为了使表格宽度能够自动调整则需要实现函数:setGridWidth
height: , // 表格高度,可以是数字,像素值或者百分比
rownumWidth: , // 如果rownumbers为true,则可以设置行号 的宽度
pager: "#usersListPager", // 分页控件的id
subGrid: false // 是否启用子表格
}).navGrid('#usersListPager', {
edit: false,
add: false,
del: false,
search: false
}); // 随着窗口的变化,设置jqgrid的宽度
$(window).bind('resize', function () {
var width = $('.usersList_wrapper').width()*0.99;
jqGrid.setGridWidth(width);
}); // 不显示水平滚动条
jqGrid.closest(".ui-jqgrid-bdiv").css({ "overflow-x" : "hidden" }); // 条件查询所有用户列表
$("#searchUserListButton").click(function(){
var searchUsersListForm = $("#searchUserListForm");
jqGrid.jqGrid().setGridParam({
page: , //第几页
url:"/video/user/queryUser?" + searchUsersListForm.serialize(),
}).trigger("reloadGrid");
}); /**
* 按下键盘触发js
*/
$('#searchUserListForm input').keypress(function (event) {
//当按下回车时
if (event.keyCode==) {
var searchUsersListForm = $("#searchUserListForm");
jqGrid.jqGrid().setGridParam({
page: , //第几页
url:"/video/user/queryUser?" + searchUsersListForm.serialize(),
}).trigger("reloadGrid");
}
}); };
return {
// 初始化各个函数及对象
init: function () {
handleUserList();
} }; }(); jQuery(document).ready(function() {
userList.init();
});
js代码中有几个关键的点:
1.colModel中的name属性必须和后台返回的pojo的属性名一致,不然页面上不会显示数据。
2.formatter:function(cellvalue,options,rowObject){} 方法非常的好用,其中cellvalue表示从后台返回的该属性的属性值,options不重要,一般用不到,rowObject表示该行的JSON对象,我们可以通过rowObject.属性名来获取到该行各个列的属性值,这在某些需求中是很有用的。
3.rowNum 表示在前端显示的每一页的行数,如果后台返回的list的行数大于rowNum,仍然以每一页显示rowNum为准。rowNum这个参数是需要传递给后台的,不过传递给后台时,需要用rows参数名来接收(这个非常重要,如果你后台用rowNum参数名来接收的话,是不能够接收到的)。
4.当我们操作了表格修改了后台的数据之后我们需要对前端的表格进行刷新,在刷新表格的时候我们也有两种方式,第一种是带条件的刷新,第二种是不带条件的。
4.1 带条件的刷新
这里我们刷新的时候可以通过setGridParam带上条件,page表示第几页,url表示请求的地址
4.2 不带条件的
setTimeout(function () {
//删除成功之后刷新一下表格
var jqGrid = $("#userList");
jqGrid.jqGrid().trigger("reloadGrid");
},);
这里,我们就是直接对前台的表格进行了刷新,不带条件。
二、在前端的代码介绍完之后,我们去看看后台的代码
public JqueryGrid queryUser(Users users, @RequestParam("page") Integer pageNum,@RequestParam("rows") Integer pageSize){
if(pageNum==null ||pageNum<=){
pageNum = ;
}
if(pageSize==null||pageSize<=){
pageSize = Const.pageSize;
}
JqueryGrid jqueryGrid = userService.selectUserListMulti(pageNum,pageSize,users);
return jqueryGrid; }
这里也有几个点需要注意的,不然后台接收不到参数,1.page表示第几页 2. rows表示一页显示的记录数。这两个参数的参数名必须是这个,这是与jquery grid约定好的。
然后该方法返回的是一个 JqueryGrid对象,我们先去看看这个类的代码:
import java.util.List; /**
* @Description: 封装分页后的数据格式(当前端使用了jqueryGrid的分页插件的时候,
* 我们必须返回该对类的实例化对象的JSON串,并且属性名是固定的,这样才能够被前端的jquerygrid给识别,
* 然后页面
* 才能成功渲染)
*/
public class JqueryGrid { private int page; // 当前页数
private int total; // 总页数
private long records; // 总记录数
private List<?> rows; // 每页显示的内容
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
public long getRecords() {
return records;
}
public void setRecords(long records) {
this.records = records;
}
public List<?> getRows() {
return rows;
}
public void setRows(List<?> rows) {
this.rows = rows;
} }
需要注意的是,我们后台只有返回含有该几个属性(属性名必须是这几个)的对象,才能够被我们的Jquery grid给识别(这也是和jquery grid约定好的),前端的页面才能够显示数据,最开始我返回的是一个封装JqueryGrid类的一个对象,结果前端数据不显示。
最终的效果:
===========================================================================
至此,前端分页神器jquery grid的简单使用,以及与后台的联调就介绍到这里,博文中提到的注意点一定要注意,不然很有可能后台接受不到参数,或者前端得到数据之后不在页面上进行显示。
最后,附上 jquery grid的学习文档的链接 http://blog.mn886.net/jqGrid/
前端分页神器,jquery grid的使用(前后端联调),让分页变得更简单。的更多相关文章
- [django]django配合前端vue前后端联调,django服务端解决跨域(django-cors-headers)
django内部csrf post提交数据解决 https://www.cnblogs.com/iiiiiher/articles/9164940.html 前端写了个页面,里面$.post发现403 ...
- 研发流程 接口定义&开发&前后端联调 线上日志观察 模型变动
阿里等大厂的研发流程,进去前先了解一下_我们一起进大厂 - SegmentFault 思否 https://segmentfault.com/a/1190000021831640 接口定义 测试用例评 ...
- 前后端分离djangorestframework——分页组件
Pagination 为什么要分页也不用多说了,大家都懂,DRF也自带了分页组件 这次用 前后端分离djangorestframework——序列化与反序列化数据 文章里用到的数据,数据库用的my ...
- week06 12 我们准备数据 前端调用rpc 前后端联调一下
用postman发送请求 出现一个问题 我在return结果前 要将数据转换成字典 所以我们用json.dumps()后再json.load()回来 这样就避免了这个问题 因为数据结构的数据 比如li ...
- 前端页面展示MySQL数据并实现前后端互动
前端页面使用H-ui框架 后端使用flask框架 数据库使用mysql 连接数据库通过pymysql实现 前端代码如下 <html lang="en"> < ...
- 12. 前后端联调 + ( proxy代理 ) + ( axios拦截器 ) + ( css Modules模块化方案 ) + ( css-loader ) + ( 非路由组件如何使用history ) + ( bodyParser,cookieParser中间件 ) + ( utility MD5加密库 ) + ( nodemon自动重启node ) + +
(1) proxy 前端的端口在:localhost:3000后端的端口在:localhost:1234所以要在webpack中配置proxy选项 (proxy是代理的意思) 在package.jso ...
- RAP, 高效前后端联调框架,接口文档管理工具
RAP通过GUI工具帮助WEB工程师更高效的管理接口文档,同时通过分析接口结构自动生成Mock数据.校验真实接口的正确性,使接口文档成为开发流程中的强依赖.有了结构化的API数据,RAP可以做的更多, ...
- Chrome调试工具Developer Tools——前端必备神器
本文链接:https://blog.csdn.net/u012542647/article/details/79401485 今天要给大家介绍一个神器,就是谷歌浏览器(Chorme)自带的前端调试工具 ...
- 用jQuery怎么做到前后端分离
传统的web开发模式想必大家都知道,不管是jsp.asp.php或者一些魔板引擎开发,其实道理都是一样的,都是服务端渲染,原理是:浏览器发送一个get请求,服务器对应的返回前端一个html页面,由浏览 ...
随机推荐
- Linux开机加载过程
2015-01-06 10:29:13 目录 1 开机加载简介 2 常规加载流程 2.1 加载BIOS 2.2 读取MBR 2.3 boot loader 2.4 加载内核 2.5 init依据i ...
- 0级搭建类002-Oracle Linux 8.x安装(OEL 8.0) 公开
项目文档引子系列是根据项目原型,制作的测试实验文档,目的是为了提升项目过程中的实际动手能力,打造精品文档AskScuti. 项目文档引子系列目前不对外发布,仅作为博客记录.如学员在实际工作过程中需提前 ...
- arm9特点
ARM9主要特点 ARM 处理器凭借它的低功耗.高性能等特点,被广泛应用于个人通信等嵌入式领域,而ARM7 也曾在中低端手持设备中占据了一席之地.然而,ARM7 的处理性能逐渐无法满足人们日益增长的高 ...
- (转)java 虚拟机内存划分
深入理解java虚拟机(一):java内存区域(内存结构划分)深入理解java虚拟机(二):java内存溢出实战 深入理解java虚拟机(三):String.intern()-字符串常量池深入理解j ...
- 155.XSS攻击原理
XSS攻击: XSS(Cross Site Script)攻击叫做跨站脚本攻击,他的原理是用户使用具有XSS漏洞的网站的时候,向这个网站提交一些恶意代码,当用户在访问这个网站的某个页面的时候,这个恶意 ...
- 【Unity|C#】基础篇(6)——const、readonly、static readonly
[学习资料] <C#图解教程>(第6章):https://www.cnblogs.com/moonache/p/7687551.html 电子书下载:https://pan.baidu.c ...
- mybatis(五):源码分析 - config文件加载流程
详细的可以参考https://blog.csdn.net/weixin_33850890/article/details/88112849
- C++-hihoCode1545-小Hi和小Ho的对弈游戏[树上Nim]
#include <set> #include <map> #include <cmath> #include <queue> #include < ...
- Shell脚本查询磁盘数量
之前帮朋友写的脚本,运维大数据服务器时候用的. #!/bin/bash ##磁盘数量 Disk=$( fdisk -l |grep 'Disk' |grep 'sd' |awk -F , '{prin ...
- CentOS7.0安装EMQ代理服务
CentOS7.0安装EMQ代理服务 安装文件下载 官网 : https://www.emqx.io/cn/ 下载地址: https://www.emqx.io/cn/downloads 选择需要的版 ...