laypage+SpringMVC实现后端分页


Posted in Javascript onJuly 27, 2019

项目中用到了模板引擎thymeleaf和前端框架layUI,算是一路摸索、一个坑一个坑踩过来的。之前边学习边做项目的时候没有记录下学习的过程和遇到问题的解决思路和方法,着实有点可惜。所以从现在开始咯。

laypage分页

下面就以laypage的两种分页展开行文的思路:异步刷新分页和整页刷新式跳转。具体可参看官方文档。

异步刷新分页

首先使用laypage之前,先加载laypage模块。使用 layui.use(‘laypage')加载即可。

1.前端html代码如下:

<div id="log-list"></div>
<div id="page-list"></div>

2.JS代码如下:

这部分使用了laypage分页函数和jQuery的append函数,实现异步刷新。

function paging(curr){
  $.getJSON('/page', {
  page: curr || 1 //向服务端传的参数
  }, function(res){
   //此处输出内容
   var table = $("<table></table>");
   table.attr({class:"layui-table admin-table",id:"page"});

   var thead = $("<thead><tr><th>编号</th><th>姓名</th><th>行为</th><th>时间</th><th>操作</th></tr></thead>");
   table.append(thead);
   var tbody = $("<tbody></tbody>");
   tbody.attr({id:"content"});

   $(function(){
    var datas = res;
     $.each(datas,function(index,value){
     var tr = $("<tr></tr>");
     tr.append("<td>"+ (++index) + "</td>");
      tbody.append(tr);
      tr.append("<td>"+ value.staffName + "</td>");
      tbody.append(tr);
      tr.append("<td>"+ value.operation + "</td>");
      tbody.append(tr);
      tr.append("<td>"+ value.createTime + "</td>");
      tbody.append(tr);
      var td = $("<td></td>");
      var div = $("<div></div>");
      div.attr({class:"layui-btn-group"});
      var button1 = $("<button detailId=" + value.weeklyId +">详情</button>");
      button1.attr({class:"layui-btn detail"});
      var button2 = $("<button recoveryId=" + value.weeklyId +">恢复</button>");
      button2.attr({class:"layui-btn recovery"});
      div.append(button1);div.append(button2);
      td.append(div);
      tr.append(td);
      tbody.append(tr);
     }); 
    });
   table.append(tbody);
   $("#log-list").append(table);
  // $("#log-list").innerHTML = table;

  //显示分页
  laypage({
   cont: 'page-list', //容器。值支持id名、原生dom对象,jquery对象。【如该容器为】:<div id="page1"></div>
   pages: res[0].pageTotal, //通过后台拿到的总页数
   curr: curr || 1, //当前页
   skip: true,
   jump: function(obj, first){ //触发分页后的回调
   if(!first){ //点击跳页触发函数自身,并传递当前页:obj.curr
    $("#log-list").text('');
    paging(obj.curr);
   }
   }
  });
  });
 };
 //运行
 paging();

实现以上代码,基本上的样式已经出来。下面执行实现后端分页和数据查询即可。/p>

3.后端代码?controller部分:

/**
  * 功能描述:返回无查询条件查询分页数据
  * @param page
  * @return
  * @since 
  */
 @RequestMapping(value="/page")
 @ResponseBody
 public List<SubmitLog> getPage(Integer page){
  if(page == null){
   page = 1;
  }
  List<SubmitLog> submitLogList = new ArrayList<>();
  submitLogList = logService.getAllLog(page);
  return submitLogList;
 }

4.后端代码?service部分:

/**
  * 功能描述 :无查询条件分页
  * @param pageCurr
  * @return
  * @since 
  */
 public List<SubmitLog> getAllLog(int pageCurr){
  int pageSize = 10;//每页显示十条数据
  int pageStart = (pageCurr - 1) * pageSize;// limit=(pageCurr -1)*10,10

  List<SubmitLog> submitLogList = new ArrayList<>();
  submitLogList = logMapper.getAllLog(pageSize, pageStart);
  //计算前端页面显示的页数
//  当前数据库记录数
  int count = submitLogList.get(0).getPageTotal();
  int page = count%pageSize == 0 ? count/pageSize : count/pageSize + 1;
  log.debug("页数"+page);
  submitLogList.get(0).setPageTotal(page);
  return submitLogList;
 }

5.后端代码?dao部分:

/**
  * 功能描述:查询所有数据--带分页
  * @param pageSize 每页大小
  * @param pageCurr 即将显示当前页
  * @return
  * @since 
  */
 @Select("SELECT s.pageTotal,number_id,staff_name,create_time,weekly_id,operation FROM submit_log,"
   + "(SELECT count(1) AS pageTotal FROM submit_log) s ORDER BY number_id DESC LIMIT #{pageStart},#{pageSize}")
 @Results({
  @Result(column="number_id",property="numberId"),
  @Result(column="staff_name",property="staffName"),
  @Result(column="create_time",property="createTime"),
  @Result(column="weekly_id",property="weeklyId")
 })
 List<SubmitLog> getAllLog(@Param("pageSize") int pageSize,@Param("pageStart") int pageStart );

至此,异步分页前后端结合基本结束,因为代码都带有必要的注释,所以也无需过多解释。

整页刷新式跳转

这种方式的分页,基本上分页逻辑都由laypage去实现了,后端分页逻辑基本上不用过多考虑。还是比较方便的,建议结合官网的文档和代码进行理解。下面是实现代码:

1.前端HTML代码:

//此处是显示数据的具体HTML代码
<div id="page-list"></div> //分页显示的位置

2.Js代码:

这部分的分页实现,后端只需返回总页数即可。

function paging(){
   $.getJSON('/weekly-page-count',{},function(res){
    //整页刷新
    laypage({
     cont: 'page-list',
     pages: res, //可以叫服务端把总页数放在某一个隐藏域,再获取。假设我们获取到的是18
     curr: function(){ //通过url获取当前页,也可以同上(pages)方式获取
     var page = location.search.match(/page=(\d+)/);
     return page ? page[1] : 1;
     }(), 
     skip: true,
     jump: function(e, first){ //触发分页后的回调
     if(!first){ //一定要加此判断,否则初始时会无限刷新
      location.href = '?page='+e.curr;
     }
     }
    });
   });
  }
  paging();

3.后端代码?controller部分:

/**
  * 功能描述:返回无查询条件查询分页数--用户
  * @param page
  * @return
  * @since 
  */
 @RequestMapping(value="/weekly-page-count")
 @ResponseBody
 public Integer getPage1(Integer userId){
  Integer count = weeklyService.getPageCount(userId);
  return count;
 }

4.后端代码?service部分:

/**
  * 功能描述:总页数
  * @param userId
  * @return
  * @since 
  */
 public Integer getPageCount(Integer userId){
  int count = 0;
  count = weeklyMapper.getPageCount(userId);

  int pageSize = 5; //每页显示条数
  int page = count%pageSize == 0 ? count/pageSize : count/pageSize + 1; //计算页数
  return page;
 }

5.后端代码?dao部分:

/**
  * 功能描述:无条件查询记录条数==分页总数
  * @param userId
  * @return
  * @since 
  */
 @Select("SELECT count(1) AS pageTotal FROM weekly WHERE user_id = #{userId}")
 Integer getPageCount(@Param("userId") Integer userId);

总结:两种分页方式使用起来都是比较方便的。使用的场景还是有些不同:异步式适合JQuery重写页面比较容易的;整页式更简单,各种场景都可以使用。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js获取div高度的代码
Aug 09 Javascript
纯js简单日历实现代码
Oct 05 Javascript
jquery实现显示已选用户
Jul 21 Javascript
jQuery中outerHeight()方法用法实例
Jan 19 Javascript
浅谈Sticky组件的改进实现
Mar 22 Javascript
JavaScript简单计算人的年龄示例
Apr 15 Javascript
Angular实现类似博客评论的递归显示及获取回复评论的数据
Nov 06 Javascript
手写简单的jQuery雪花飘落效果实例
Apr 22 jQuery
html+jQuery实现拖动滑块图片拼图验证码插件【移动端适用】
Sep 10 jQuery
小程序中的箭头函数的具体使用
Jun 19 Javascript
Angular进行简单单元测试的实现方法实例
Aug 16 Javascript
全网小程序接口请求封装实例代码
Nov 06 Javascript
laypage.js分页插件使用方法详解
Jul 27 #Javascript
layui2.0使用table+laypage实现真分页
Jul 27 #Javascript
微信小程序 腾讯地图显示偏差问题解决
Jul 27 #Javascript
基于layPage插件实现两种分页方式浅析
Jul 27 #Javascript
基于ssm框架实现layui分页效果
Jul 27 #Javascript
layUI实现前端分页和后端分页
Jul 27 #Javascript
layui实现数据分页功能(ajax异步)
Jul 27 #Javascript
You might like
PHP中在数据库中保存Checkbox数据(2)
2006/10/09 PHP
最简单的PHP程序--记数器
2006/10/09 PHP
WordPress自定义时间显示格式
2015/03/27 PHP
PHP抓取远程图片(含不带后缀的)教程详解
2016/10/21 PHP
[原创]PHP实现SQL语句格式化功能的方法
2017/07/28 PHP
不同浏览器对回车提交表单的处理办法
2010/02/13 Javascript
JavaScript/jQuery 表单美化插件小结
2012/02/14 Javascript
JavaScript取得鼠标绝对位置程序代码介绍
2012/09/16 Javascript
JavaScript调用客户端的可执行文件(示例代码)
2013/11/28 Javascript
Javascript中的call()方法介绍
2015/03/15 Javascript
jQuery背景插件backstretch使用指南
2015/04/21 Javascript
js中日期的加减法
2015/05/06 Javascript
JS组件Bootstrap实现下拉菜单效果代码
2016/04/26 Javascript
Jquery ui datepicker设置日期范围,如只能隔3天【实现代码】
2016/05/04 Javascript
canvas实现十二星座星空图
2017/02/14 Javascript
jQuery日程管理控件glDatePicker用法详解
2017/03/29 jQuery
基于AGS JS开发自定义贴图图层
2017/03/31 Javascript
vue router学习之动态路由和嵌套路由详解
2017/09/21 Javascript
基于js原生和ajax的get和post方法以及jsonp的原生写法实例
2017/10/16 Javascript
angularjs数组判断是否含有某个元素的实例
2018/02/27 Javascript
使用pm2部署node生产环境的方法步骤
2019/03/09 Javascript
微信小程序的mpvue框架快速上手指南
2019/05/15 Javascript
浅谈监听单选框radio改变事件(和layui中单选按钮改变事件)
2019/09/10 Javascript
django 通过ajax完成邮箱用户注册、激活账号的方法
2018/04/17 Python
python3 打印输出字典中特定的某个key的方法示例
2019/07/06 Python
Django项目基础配置和基本使用过程解析
2019/11/25 Python
pytorch 模型的train模式与eval模式实例
2020/02/20 Python
使用Pycharm(Python工具)新建项目及创建Python文件的教程
2020/04/26 Python
python中如何设置代码自动提示
2020/07/15 Python
scrapy与selenium结合爬取数据(爬取动态网站)的示例代码
2020/09/28 Python
StubHub意大利:购买和出售全球演唱会和体育赛事门票
2017/11/21 全球购物
咖啡书吧创业计划书
2014/01/13 职场文书
常务副总经理岗位职责
2014/04/12 职场文书
公司爱心捐款倡议书
2014/05/14 职场文书
优秀大专毕业生求职信
2014/08/04 职场文书
使用opencv-python如何打开USB或者笔记本前置摄像头
2022/06/21 Python