1. 程式人生 > 程式設計 >Bootstrap table 伺服器端分頁功能實現方法示例

Bootstrap table 伺服器端分頁功能實現方法示例

本文例項講述了Bootstrap table 伺服器端分頁功能實現方法。分享給大家供大家參考,具體如下:

bootstrap版本 為 3.X

bootstrap-table.min.css
bootstrap-table-zh-CN.min.js
bootstrap-table.min.js

前端bootstrap+jQuery,服務端使用spring MVC實現restful風格服務

前端程式碼塊

<table id="test-table" class="col-xs-12" data-toolbar="#toolbar">

function initTable(){
  $('#test-table').bootstrapTable({
    method: 'get',toolbar: '#toolbar',//工具按鈕用哪個容器
    striped: true,//是否顯示行間隔色
    cache: false,//是否使用快取,預設為true,所以一般情況下需要設定一下這個屬性(*)
    pagination: true,//是否顯示分頁(*)
    sortable: false,//是否啟用排序
    sortOrder: "asc",//排序方式
    pageNumber:1,//初始化載入第一頁,預設第一頁
    pageSize: 10,//每頁的記錄行數(*)
    pageList: [10,25,50,100],//可供選擇的每頁的行數(*)
    url: "/testProject/page4list.json",//這個介面需要處理bootstrap table傳遞的固定引數
    queryParamsType:'',//預設值為 'limit',在預設情況下 傳給服務端的引數為:offset,limit,sort
              // 設定為 '' 在這種情況下傳給伺服器的引數為:pageSize,pageNumber

    //queryParams: queryParams,//前端呼叫服務時,會預設傳遞上邊提到的引數,如果需要新增自定義引數,可以自定義一個函式返回請求引數
    sidePagination: "server",//分頁方式:client客戶端分頁,server服務端分頁(*)
    //search: true,//是否顯示錶格搜尋,此搜尋是客戶端搜尋,不會進服務端,所以,個人感覺意義不大
    strictSearch: true,//showColumns: true,//是否顯示所有的列
    //showRefresh: true,//是否顯示重新整理按鈕
    minimumCountColumns: 2,//最少允許的列數
    clickToSelect: true,//是否啟用點選選中行
    searchOnEnterKey: true,columns: [{
      field: 'id',title: 'id',align: 'center'
    },{
      field: 'testkey',title: '測試標識',{
      field: 'testname',title: '測試名字',{
      field: 'id',title: '操作',align: 'center',formatter:function(value,row,index){
        //通過formatter可以自定義列顯示的內容
        //value:當前field的值,即id
        //row:當前行的資料
        var a = '<a href="" >測試</a>';
      } 
    }],pagination:true
  });
}

在前端通過請求獲取table資料時,bootstrap table會預設拼一個 searchText的引數,來支援查詢功能。

服務端程式碼

  @RequestMapping(value = "/page4list.json")
  public void page4list(Integer pageSize,Integer pageNumber,String searchText,HttpServletRequest request,HttpServletResponse response) {

    //搜尋框功能
    //當查詢條件中包含中文時,get請求預設會使用ISO-8859-1編碼請求引數,在服務端需要對其解碼
    if (null != searchText) {
      try {
        searchText = new String(searchText.getBytes("ISO-8859-1"),"UTF-8");
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
    //在service通過條件查詢獲取指定頁的資料的list
    List<MwmsgType> list = mwMsgQueueService.page4List(pageSize,pageNumber,searchText);
    //根據查詢條件,獲取符合查詢條件的資料總量
    int total = mwMsgQueueService.queryCountBySearchText(searchText);
    //自己封裝的資料返回型別,bootstrap-table要求伺服器返回的json資料必須包含:totlal,rows兩個節點
    PageResultForBootstrap page = new PageResultForBootstrap();
    page.setTotal(total);
    page.setRows(list);
    //page就是最終返回給客戶端的資料結構,可以直接返回給前端

    //下邊這段,只是我自己的程式碼有自定義的spring HandlerInterceptor處理返回值,可以忽略。
    request.setAttribute(Constants.pageResultData,page);

  }

完成上述程式碼,即可實現伺服器端自動分頁,bootstrap-table根據伺服器端返回的total,以及table設定的pageSize,自動生成分頁的頁面元素,每次點選下一頁或者指定頁碼,bootstrap-table會自動給引數pageNumber賦值,伺服器返回指定頁的資料。

如果傳送的是post請求,因為bootstap table使用的是ajax方式獲取資料,這時會將請求的content type預設設定為 text/plain,這樣在服務端直接通過 @RequestParam引數對映是獲取不到的。

這時就需要在bootstrap-table的引數列表中顯式設定

contentType: "application/x-www-form-urlencoded"

設定成form表單的形式,tomcat內部就會自動將requset payload中的資料部分解析放到request.getParameter()中,之後就可以直接通過@RequestParam對映引數獲取
post的處理參考了下面這個哥們的博文,在此感謝!

參考連結:
https://www.jb51.net/article/129039.htm

PS:關於bootstrap佈局,這裡再為大家推薦一款本站的線上視覺化佈局工具供大家參考使用:

線上bootstrap視覺化佈局編輯工具:
http://tools.jb51.net/aideddesign/layoutit

希望本文所述對大家基於bootstrap的程式設計有所幫助。