bootstrap table服务端实现分页效果


Posted in Javascript onAugust 10, 2017

实现bootstrap table服务端实现分页demo,具体内容如下

首页index.html

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Demo</title>
  <link rel="stylesheet" href="/assets/css/bootstrap.min.css" rel="external nofollow" />
  <link rel="stylesheet" href="/assets/css/bootstrap-table.min.css" rel="external nofollow" >
  <script src="/assets/js/jquery-2.1.1.min.js"></script>
  <script src="/assets/js/bootstrap.min.js"></script>
  <script src="/assets/js/bootstrap-table.min.js"></script>
  <script src="/assets/js/bootstrap-table-zh-CN.min.js"></script>
  <script src="/assets/js/index.js"></script>
</head>

<body>
  <!--查询窗体-->
  <div class="widget-content">
    <form method="post" class="form-horizontal" id="eventqueryform">
      <input type="text" class="span2" name="seqNo" placeholder="编号"> 
      <input type="text" class="span3" name="name" placeholder="姓名"> 
      <input type="button" class="btn btn-default span1" id="eventquery" value="查询">
    </form>
  </div>

  <div class="widget-content">
    <!--工具条-->
    <div id="toolbar">
      <button class="btn btn-success btn-xs" data-toggle="modal" data-target="#add">添加事件</button>
    </div>
    <table id="eventTable"></table>
  </div>
</body>

</html>

index.js

$(function() {
  // 初始化表格
  initTable();

  // 搜索按钮触发事件
  $("#eventquery").click(function() {
    $('#eventTable').bootstrapTable(('refresh')); // 很重要的一步,刷新url!
    // console.log("/program/area/findbyItem?offset="+0+"&"+$("#areaform").serialize())
    $('#eventqueryform input[name=\'name\']').val('')
    $('#eventqueryform input[name=\'seqNo\']').val('')
  });

});

// 表格初始化
function initTable() {
  $('#eventTable').bootstrapTable({
    method : 'post',  // 向服务器请求方式
    contentType : "application/x-www-form-urlencoded", // 如果是post必须定义
    url : '/bootstrap_table_demo/findbyitem',  // 请求url
    cache : false, // 是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
    striped : true, // 隔行变色
    dataType : "json", // 数据类型
    pagination : true, // 是否启用分页
    showPaginationSwitch : false, // 是否显示 数据条数选择框
    pageSize : 10, // 每页的记录行数(*)
    pageNumber : 1,   // table初始化时显示的页数
    pageList: [5, 10, 15, 20], //可供选择的每页的行数(*)
    search : false, // 不显示 搜索框
    sidePagination : 'server', // 服务端分页
    classes : 'table table-bordered', // Class样式
//   showRefresh : true, // 显示刷新按钮
    silent : true, // 必须设置刷新事件
    toolbar : '#toolbar',    // 工具栏ID
    toolbarAlign : 'right',   // 工具栏对齐方式
    queryParams : queryParams, // 请求参数,这个关系到后续用到的异步刷新
    columns : [ {
      field : 'seqNo',
      title : '编号',
      align : 'center'
    }, {
      field : 'name',
      title : '姓名',
      align : 'center'
    }, {
      field : 'sex',
      title : '性别',
      align : 'center'
    }, {
      field : 'id',
      title : '操作',
      align : 'center',
      width : '280px',
      formatter : function(value, row, index) {
//        console.log(JSON.stringify(row));
      }
    } ],
  });
}

// 分页查询参数,是以键值对的形式设置的
function queryParams(params) {
  return {
    name : $('#eventqueryform input[name=\'name\']').val(),  // 请求时向服务端传递的参数
    seqNo : $('#eventqueryform input[name=\'seqNo\']').val(),

    limit : params.limit, // 每页显示数量
    offset : params.offset, // SQL语句偏移量
  }
}

服务端 servlet

/**
 * Servlet实现类
 */
public class UserFindByItemSetvlet extends HttpServlet {
  private static final long serialVersionUID = 1L;
  private IUserService service = new UserServiceImpl();

  public UserFindByItemSetvlet() {
    super();
  }

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

  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.setCharacterEncoding("utf-8");
    response.setContentType("text/json; charset=UTF-8");

    // 得到表单数据
    int offset = Integer.parseInt(request.getParameter("offset").trim());
    int limit = Integer.parseInt(request.getParameter("limit").trim());
    String seqNo = request.getParameter("seqNo").trim();
    String name = request.getParameter("name").trim();

    // 调用业务组件,得到结果
    PageBean<UserBean> pageBean;
    try {
      pageBean = service.findByItem(offset, limit, seqNo, name);
      ObjectMapper oMapper = new ObjectMapper();
      //对象转换为json数据 ,且返回
      oMapper.writeValue(response.getWriter(), pageBean);
    } catch (Exception e) {     
      e.printStackTrace();
    }

  }

}

分页封装类

/**
 * 分页实体类
 */
public class PageBean<T> {
  /** 行实体类 */
  private List<T> rows = new ArrayList<T>();
  /** 总条数 */
  private int total;

  public PageBean() {
    super();
  }

  public List<T> getRows() {
    return rows;
  }

  public void setRows(List<T> rows) {
    this.rows = rows;
  }

  public int getTotal() {
    return total;
  }

  public void setTotal(int total) {
    this.total = total;
  }

}

获取用户实现类

public class UserServiceImpl implements IUserService{

  /**
   * sql查询语句
   */
  public PageBean<UserBean> findByItem(int offset, int limit, String seqNo, String name) {
    PageBean<UserBean> cutBean = new PageBean<UserBean>();

    // 基本SQL语句
    String sql = "SELECT * FROM c_userinfo where 1=1 ";

    // 动态条件的SQL语句
    String itemSql = "";

    if (seqNo != null && seqNo.length() != 0) {
      itemSql += "and SeqNo like '%" + seqNo + "%' ";
    }

    if (name != null && name.length() != 0) {
      itemSql += "and Name like '%" + name + "%' ";
    }

    // 获取sql连接
    Connection con = DButil.connect();
    PreparedStatement ps = null;
    ResultSet rs = null;
    try {

      ps = con.prepareStatement(sql + itemSql + "limit ?,?");
      ps.setInt(1, offset);
      ps.setInt(2, limit);
      rs = ps.executeQuery();
      while (rs.next()) {
        UserBean bean = new UserBean();
        bean.setSeqNo(rs.getInt("seqNo"));
        bean.setName(rs.getString("name"));
        bean.setSex(rs.getInt("sex"));
        bean.setBirth(rs.getString("birth"));
        cutBean.getRows().add(bean);
      }
      // 得到总记录数,注意,也需要添加动态条件
      ps = con.prepareStatement("SELECT count(*) as c FROM c_userinfo where 1=1 " + itemSql);
      rs = ps.executeQuery();
      if (rs.next()) {
        cutBean.setTotal(rs.getInt("c"));
      }
    } catch (SQLException e) {
      e.printStackTrace();
    } finally {
      DButil.close(con);
      if (ps != null) {
        try {
          ps.close();
        } catch (SQLException e) {
          e.printStackTrace();
        }
      }
      if (rs != null) {
        try {
          rs.close();
        } catch (SQLException e) {
          e.printStackTrace();
        }
      }
    }
    return cutBean;
  }
}

数据库工具类

/**
 * 数据库工具类
 * 
 * @author way
 * 
 */
public class DButil {
  /**
   * 连接数据库
   * 
   */
  public static Connection connect() {
    Properties pro = new Properties();
    String driver = null;
    String url = null;
    String username = null;
    String password = null;
    try {
      InputStream is = DButil.class.getClassLoader()
          .getResourceAsStream("DB.properties");
      pro.load(is);
      driver = pro.getProperty("driver");
      url = pro.getProperty("url");
      username = pro.getProperty("username");
      password = pro.getProperty("password");
      Class.forName(driver);
      Connection conn = DriverManager.getConnection(url, username,
          password);
      return conn;
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    } catch (ClassNotFoundException e) {
      e.printStackTrace();
    } catch (SQLException e) {
      e.printStackTrace();
    }
    return null;
  }

  /**
   * 关闭数据库
   * 
   * @param conn
   *     
   */
  public static void close(Connection con) {
    if (con != null) {
      try {
        con.close();
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }
  }

DB.properties文件

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/gov_social?useUnicode\=true&characterEncoding\=utf-8
username=root
password=root

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

Javascript 相关文章推荐
JS小游戏之宇宙战机源码详解
Sep 25 Javascript
jQuery将所有被选中的checkbox某个属性值连接成字符串的方法
Jan 24 Javascript
JQuery包裹DOM节点的方法
Jun 11 Javascript
BootStrap学习系列之Bootstrap Typeahead 组件实现百度下拉效果(续)
Jul 07 Javascript
前端框架Vue.js构建大型应用浅析
Sep 12 Javascript
基于JS实现横线提示输入验证码随验证码输入消失(js验证码的实现)
Oct 27 Javascript
基于JS实现移动端向左滑动出现删除按钮功能
Feb 22 Javascript
webpack之devtool详解
Feb 10 Javascript
Angular5集成eventbus的示例代码
Jul 19 Javascript
Angular请求防抖处理第一次请求失效问题
May 17 Javascript
在微信小程序中使用vant的方法
Jun 07 Javascript
JavaScript实现页面高亮操作提示和蒙板
Jan 04 Javascript
AngularJs+Bootstrap实现漂亮的计算器
Aug 10 #Javascript
React-Native做一个文本输入框组件的实现代码
Aug 10 #Javascript
js实现省市级联效果分享
Aug 10 #Javascript
JavaScript使用Ajax上传文件的示例代码
Aug 10 #Javascript
jquery对table做排序操作的实例演示
Aug 10 #jQuery
基于JavaScript实现飘落星星特效
Aug 10 #Javascript
提高Node.js性能的应用技巧分享
Aug 10 #Javascript
You might like
PHP中的integer类型使用分析
2010/07/27 PHP
PHP处理SQL脚本文件导入到MySQL的代码实例
2014/03/17 PHP
PHP生成图片验证码功能示例
2017/01/12 PHP
超强多功能php绿色集成环境详解
2017/01/25 PHP
浅析PHP 中move_uploaded_file 上传中文文件名失败
2019/04/17 PHP
laravel框架语言包拓展实现方法分析
2019/11/22 PHP
PHP命名空间(namespace)原理与用法详解
2019/12/11 PHP
javascript数组的扩展实现代码集合
2008/06/01 Javascript
30个最佳jQuery Lightbox效果插件分享
2011/04/11 Javascript
jquery限制输入字数,并提示剩余字数实现代码
2012/12/24 Javascript
复制js对象方法(详解)
2013/07/08 Javascript
利用JS进行图片的切换即特效展示图片
2013/12/03 Javascript
js 跳出页面的frameset框架示例介绍
2013/12/23 Javascript
javascript闭包入门示例
2014/04/30 Javascript
浅析JS动态创建元素【两种方法】
2016/04/20 Javascript
JS弹出层遮罩,隐藏背景页面滚动条细节优化分析
2016/04/29 Javascript
node.js 动态执行脚本
2016/06/02 Javascript
js实现不提示直接关闭网页窗口
2017/03/30 Javascript
vue-cli项目使用mock数据的方法(借助express)
2019/04/15 Javascript
Vue分页器实现原理详解
2019/06/28 Javascript
js利用拖放实现添加删除
2020/08/27 Javascript
如何使用JS console.log()技巧提高工作效率
2020/10/14 Javascript
[46:09]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS VG第三场
2014/05/26 DOTA
Django视图之ORM数据库查询操作API的实例
2017/10/27 Python
Python补齐字符串长度的实例
2018/11/15 Python
python中用logging实现日志滚动和过期日志删除功能
2019/08/20 Python
Python3 shutil(高级文件操作模块)实例用法总结
2020/02/19 Python
python数据库编程 ODBC方式实现通讯录
2020/03/27 Python
Python内存泄漏和内存溢出的解决方案
2020/09/26 Python
英国最大的经认证的有机超市:Planet Organic
2018/02/02 全球购物
Juice Beauty官网:有机美容产品,护肤与化妆品
2020/06/13 全球购物
新闻专业本科生的自我评价分享
2013/11/20 职场文书
学术诚信承诺书
2014/05/26 职场文书
考试作弊检讨
2015/01/27 职场文书
2016入党积极分子党课学习心得体会
2015/10/09 职场文书
深入理解 Golang 的字符串
2022/05/04 Golang