前端分页神器,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页面,由浏览 ...
随机推荐
- python 3 可迭代对象与迭代器
1,可迭代对象 内部含有__iter__方法的对象是可迭代对象 遵循可迭代协议 dir() 检查对象含有什么方法 dir()会返回一个列表,这个列表中含有该对象的以字符串的形式所有方法名.这样我们就可 ...
- 关闭visual studio code 智能提示功能
对于程序初学者来说,应该少用IDE的提示功能,因为这样有助于记住一些常用的函数等功能.这也是为什么戏称喜欢用notepad++(windows)或者vim编辑器(Linux)来开发代码是大神的原因,而 ...
- 一些java基础知识的备忘
接口和抽象类的区别是什么? 接口的方法默认是 public,所有方法在接口中不能有实现(Java 8 开始接口方法可以有默认实现),而抽象类可以有非抽象的方法. 接口中除了static.final变量 ...
- python3运行调用htmltestrunner时,报错UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0
之前解决过一次,又忘了,这次写下来了..百度没有的,跟我环境有关! 环境:自动化运行环境python3.6.5 上期说到了,写了一个bat来运行runallcase.py. 但是双击运行却报错:Uni ...
- 动态规划(Dynamic Programming, DP)---- 最大连续子序列和
动态规划(Dynamic Programming, DP)是一种用来解决一类最优化问题的算法思想,简单来使,动态规划是将一个复杂的问题分解成若干个子问题,或者说若干个阶段,下一个阶段通过上一个阶段的结 ...
- vector,list不是模板
vector和list在命名空间std里,还需要添加声明 using namespace std; 或者 std::list 也可以.
- [bzoj1905] [ZJOI2007] Hide 捉迷藏
题意简述 给定一棵 \(n\) 个点的树,起初每个点都为黑色. 2种操作,要么改变某个点的颜色(由黑至白或由白至黑),要么询问距离最远的两个黑点间的距离. 共 \(m\) 次操作. \(n\leq 1 ...
- centos7修改xshell默认访问端口由22修改为62058
1.vim /etc/ssh/sshd_config 2.新加端口62058:Port 62058 3.重启sshd服务:systemctl restart sshd 4.将新加端口添加到防火墙并重启 ...
- 点击事件后根据url保持相应导航高亮
直接上代码吧!!! HTML页面: <div class="nav"> <ul class="sub-tit"> <li>& ...
- 利用python装饰器为字符串添加,HTML标签
# 为字符串添加HTML标签 import time def zhuang(fun): def zhaung_1(*args, **kargs): # time.sleep(1) html_str = ...