基于jQuery ligerUI实现分页样式


Posted in Javascript onSeptember 18, 2016

在公司实习看到公司框架里使用了ligerUI的grid进行分页,个人感觉挺好用的,自己摸索着实现了一遍记录下来 

简单来说,liger grid 就是提交准备好的数据到指定的目标请求数据,拿到数据以后,显示出来(通过ajax实现)。 

ligerGrid是ligerui系列插件的核心控件,用户可以快速地创建一个美观,而且功能强大的表格,支持排序、分页、多表头、固定列等等。 

这里只实现基于ligerUI的分页 

LigerUI的分页方式有两种:localserver

如果数据量不是很大,就直接采用local分页,一次性的把数据全部发送到前台来,之后LigerUI自身的grid会自动分页。说一下 total,在后台传送jsonString时传送定义好的total(总条数),你可以定义多少都可以,但是到前台它会自动将总条数赋值给total, 这是local下的方式。 

而如果数据量很大,一次性加载直接不显示数据或反应很慢的,就需要用server分页了,当用server分页时,每次请求都会比local时多发送两个参数:page和pagesize,不需要自己去发送,只需要在后台获取就行。 

int page=Integer.parseInt(request.getParameter("page")); 
int pagesize=Integer.parseInt(request.getParameter("pagesize")); 
int total; 

这时你可以把page和pagesize写进你的sql语句: 
sql="........."; 
sql+=" limit "+(page*pagesize-pagesize)+","+pagesize; 

这样查出的结果放入jsonString中,这里要注意total了,total需要自己定义,需要自己重新查一下结果的总条数后赋值给total传到页面,其他的LigerUI会帮你搞定! 

关于更多的ligerUI grid参官网考API  http://api.ligerui.com/?to=grid
关于选择前端分页还是后台分页参考https://3water.com/article/86326.htm

local实现只需要将查询的数据全部提交到前端框架会自动帮你实现分页,但是我个人并不提倡进行客户端分页,Web应用服务器和客户端之间是网络,如果网络传递的数据量越少,则客户端获得响应的速度越快.而且一般来说,数据库服务器和Web应用服务器的处理能力一般比客户端要强很多.从这两点来看,在客户端分页的方案是最不可取的 

下面上server端分页代码:

由于只使用了分页所以只导入了部分插件和图片

基于jQuery ligerUI实现分页样式 

引入需要的jquery,liger和css 

<link href="js/ligerui-all.css" rel="stylesheet" type="text/css">
<script type="text/javascript" src="js/jquery-3.0.0.js"></script>
<script type="text/javascript" src="js/ligerui.all.js"></script>

jsp中样例如下:在ligerGrid中需要指定dataAction(默认是local),请求的url,page和pageSize,其中page和pageSize可以在后台获取 

<script type="text/javascript" >
$(function(){

 var grid = $("#maingrid").ligerGrid({
  columns: [
  { name: 'id', display: '序号',
   render:function(record, rowindex, value, column){
    return rowindex+1;

   }

  },

  { name: 'title', display: '标题'}
  ],
  height:210,
  dataAction:"server",
  url:"LUServlet",
  page:"1",
  pageSize:"5"

  });

});
</script>
</head>
<body>
<div style="width:600px">
<div id="maingrid"></div>
</div>

model类和测试数据库 

//为了省事用sql.Date
import java.sql.Date;
public class Blog {
 private int id;
 private int category_id;
 private String title;
 private String content;
 private Date created_time;
 //getter和setter方法
 @Override
 public String toString() {
  return "Blog [id=" + id + ", category_id=" + category_id + ", title=" + title + ", content=" + content
    + ", created_time=" + created_time + "]";
 }
 
}

dao类,用jdbc测试 

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import model.Blog;

public class MysqlTest {
 PreparedStatement ps = null;
 ResultSet rs = null;
 Connection connect = null;

 public MysqlTest() {
  try {
   Class.forName("com.mysql.jdbc.Driver");
   connect = DriverManager.getConnection("jdbc:mysql://localhost:3306/blogs_stu", "root", "");
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
 //返回一个Blog数组,用于拼接json字符串
 //不用model时可以直接在此处拼接json字符串返回
 //传入page和pagesize用于判断最后一页数组长度,否则会报错
 public Blog[] getInfo(String sql,int page,int pagesize) {
  int total=getTotal();
  if(page*pagesize>=total){
   pagesize=total%pagesize;
  }
  Blog[] blog = new Blog[pagesize];
  try {
   ps = connect.prepareStatement(sql);
   rs = ps.executeQuery();
   int index=0;
   while (rs.next()) {
    blog[index]=new Blog();
    blog[index].setId(rs.getInt("id"));
    blog[index].setCategory_id(rs.getInt("category_id"));
    blog[index].setTitle(rs.getString("title"));
    blog[index].setContent(rs.getString("content"));
    blog[index].setCreated_time(rs.getDate("created_time"));
    index++;
   }
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   if (connect != null)
    try {
     connect.close();
     ps.close();
     rs.close();
    } catch (SQLException e) {
     e.printStackTrace();
    }
  }
  return blog;
 }
 //获取总记录数total
 public int getTotal(){
  int total=0;
  String sql="";
   try {
    sql="select count(id) from blog";
    ps = connect.prepareStatement(sql);
    rs = ps.executeQuery();
    while(rs.next()){
    total=rs.getInt(1);
    }
   } catch (SQLException e) {
    e.printStackTrace();
   }
   return total;
  }
}

后台servlet实现 

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import model.Blog;
import mysqljdbc.MysqlTest;

@WebServlet("/LUServlet")
public class LUServlet extends HttpServlet {

 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  request.setCharacterEncoding("utf-8");
  response.setContentType("text/html; charset=utf-8");
  //获取页面的page和pagesize,拼接sql用
  int page=Integer.valueOf(request.getParameter("page"));
  int pagesize=Integer.valueOf(request.getParameter("pagesize"));
  
  MysqlTest test=new MysqlTest();
  //在拼接json字符串是传给前台一个total记录总数,ligerUI grid会自动获取该total
  int total=test.getTotal();
  request.setAttribute("total", total);
  //用的mysql,查找限定条数语句用limit,从page*pagesize-pagesize开始,取pagesize条
  String sql="select * from blog";
  sql+=" limit "+(page*pagesize-pagesize)+","+pagesize;
  Blog[] blog=test.getInfo(sql,page,pagesize);
  //将数据拼接成json字符串
  StringBuffer strbuffer=new StringBuffer();
  //ligerUI grid接受的json格式是{"Rows":[],"Total":""}
  strbuffer.append("{\"Rows\":[");
  for(int i=0;i<blog.length;i++){
   strbuffer.append("{\"title\":").append("\"" + blog[i].getTitle() + "\"},");
  }
  strbuffer.replace(strbuffer.length()-1, strbuffer.length(), "");
  strbuffer.append("],").append("\"Total\":").append("\""+total+"\"").append("}");
  PrintWriter out=response.getWriter();
  out.write(strbuffer.toString());
  out.close();
 }

 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  doGet(request,response);
 }
}

运行结果(默认样式可以改,具体参照ligerUI API):

基于jQuery ligerUI实现分页样式

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

Javascript 相关文章推荐
JavaScript 异步方法队列链实现代码分析
Jun 05 Javascript
Jquery网页出现的乱码问题的三种解决方法
Jun 30 Javascript
jquery+ajax验证不通过也提交表单问题处理
Dec 12 Javascript
JavaScript判断前缀、后缀是否是空格的方法
Apr 15 Javascript
jQuery+CSS3实现四种应用广泛的导航条制作实例详解
Sep 17 Javascript
js实现一个可以兼容PC端和移动端的div拖动效果实例
Dec 09 Javascript
详解VUE的状态控制与延时加载刷新
Mar 27 Javascript
jQuery模拟爆炸倒计时功能实例代码
Aug 21 jQuery
一次记住JavaScript的6个正则表达式方法
Feb 22 Javascript
解决vue-cli单页面手机应用input点击手机端虚拟键盘弹出盖住input问题
Aug 25 Javascript
通过说明与示例了解js五种设计模式
Jun 17 Javascript
Node.js使用MongoDB的ObjectId作为查询条件的方法
Sep 10 Javascript
深入浅析JS是按值传递还是按引用传递(推荐)
Sep 18 #Javascript
JQuery控制DIV的选取实现方法
Sep 18 #Javascript
chrome下判断点击input上标签还是其余标签的实现方法
Sep 18 #Javascript
通过jquery实现页面的动画效果(实例代码)
Sep 18 #Javascript
JQuery实现DIV其他动画效果的简单实例
Sep 18 #Javascript
JQuery遍历元素的后代和同胞实现方法
Sep 18 #Javascript
AngularJS实现树形结构(ztree)菜单示例代码
Sep 18 #Javascript
You might like
PHP HTML代码串 截取实现代码
2009/06/29 PHP
一些php项目中比较通用的php自建函数的详解
2013/06/06 PHP
PHP中exec函数和shell_exec函数的区别
2014/08/20 PHP
php使用str_replace实现输入框回车替换br的方法
2014/11/24 PHP
php使用ftp实现文件上传与下载功能
2017/07/21 PHP
php nginx 实时输出的简单实现方法
2018/01/21 PHP
PHP常见数组排序方法小结
2018/08/20 PHP
JavaScript创建命名空间(namespace)的最简实现
2007/12/11 Javascript
IE下js调试工具Companion.JS
2010/10/15 Javascript
EasyUI的treegrid组件动态加载数据问题的解决办法
2011/12/11 Javascript
javascript判断chrome浏览器的方法
2014/03/26 Javascript
JavaScript中的标签语句用法分析
2015/02/10 Javascript
jQuery实现的向下图文信息滚动效果
2015/05/03 Javascript
AngularJs学习第五篇从Controller控制器谈谈$scope作用域
2016/06/08 Javascript
省市选择的简单实现(基于zepto.js)
2016/06/21 Javascript
AngularJS 模块详解及简单实例
2016/07/28 Javascript
原生js图片轮播效果实现代码
2016/10/19 Javascript
js学习总结之dom2级事件基础知识详解
2017/07/27 Javascript
基于vue.js路由参数的实例讲解——简单易懂
2017/09/07 Javascript
Angular利用trackBy提升性能的方法
2018/01/26 Javascript
微信小程序模板消息限制实现无限制主动推送的示例代码
2019/08/27 Javascript
viewer.js一个强大的基于jQuery的图像查看插件(支持旋转、缩放)
2020/04/01 jQuery
JavaScript检测是否开启了控制台(F12调试工具)
2020/10/02 Javascript
python多线程扫描端口示例
2014/01/16 Python
python使用rsa加密算法模块模拟新浪微博登录
2014/01/22 Python
从CentOS安装完成到生成词云python的实例
2017/12/01 Python
Python实现识别手写数字 简易图片存储管理系统
2018/01/29 Python
如何使用Flask-Migrate拓展数据库表结构
2019/07/24 Python
Python3.9最新版下载与安装图文教程详解(Windows系统为例)
2020/11/28 Python
python 如何引入协程和原理分析
2020/11/30 Python
python中字符串的编码与解码详析
2020/12/03 Python
css和css3弹性盒模型实现元素宽度(高度)自适应
2019/05/15 HTML / CSS
浅谈cookie和localStorage那些事
2019/08/27 HTML / CSS
Anya Hindmarch官网:奢侈设计师手袋及配饰
2018/11/15 全球购物
计算机专业毕业生求职信
2014/04/30 职场文书
学历证明样本
2015/06/16 职场文书