Bootstrap Table從服務(wù)器加載數(shù)據(jù)進(jìn)行顯示的實(shí)現(xiàn)方法
Bootstrap-Table是一個(gè)Boostrap的表格插件,能夠?qū)SON數(shù)據(jù)直接顯示在表格中。當(dāng)然,這需要配置一些參數(shù)并進(jìn)行初始化表格才行。其官方網(wǎng)站地址為:http://bootstrap-table.wenzhixin.net.cn/。里面可以下載使用所需的JS和CSS文件,以及參考文檔和例子。
Bootstrap-Table顯示數(shù)據(jù)到表格的方式有兩種,一種是客戶端(client)模式,一種是服務(wù)器(server)模式。
所謂客戶端模式,指的是在服務(wù)器中把要顯示到表格的數(shù)據(jù)一次性加載出來,然后轉(zhuǎn)換成JSON格式傳到要顯示的界面中,在JavaWeb中可以保存在request中,然后轉(zhuǎn)發(fā)到指定界面,在界面初始化的時(shí)候使用EL表達(dá)式獲取,然后調(diào)用相關(guān)初始化的函數(shù),將JSON字符串傳進(jìn)去即可顯示??蛻舳四J捷^為簡單,它是把數(shù)據(jù)一次性加載出來放到界面上,然后根據(jù)你設(shè)置的每頁記錄數(shù),自動(dòng)生成分頁。當(dāng)點(diǎn)擊第二頁時(shí),會自動(dòng)加載出數(shù)據(jù),不會再向服務(wù)器發(fā)送請求。同時(shí)用戶可以使用其自帶的搜索功能,可以實(shí)現(xiàn)全數(shù)據(jù)搜索。對于數(shù)據(jù)量較少的時(shí)候,可以使用這個(gè)方法。但是對于數(shù)據(jù)量大的系統(tǒng),使用該方法會造成加載出一些很久之前的,用戶不在關(guān)注的數(shù)據(jù),使得加載速度變慢,增加了服務(wù)器的負(fù)擔(dān),浪費(fèi)了資源。這時(shí)應(yīng)該采用服務(wù)器模式。
所謂服務(wù)器模式,指的是根據(jù)設(shè)定的每頁記錄數(shù)和當(dāng)前要顯示的頁碼,發(fā)送數(shù)據(jù)到服務(wù)器進(jìn)行查詢,然后再顯示到表格中。該方法可以根據(jù)用戶的需要?jiǎng)討B(tài)的加載數(shù)據(jù),節(jié)省了服務(wù)器的資源,但是不能使用其自帶的全數(shù)據(jù)搜索功能。因?yàn)槟慵虞d的數(shù)據(jù)只是一頁的數(shù)據(jù),所以全數(shù)據(jù)搜索的范圍也只在一頁之中。
客戶端模式較為簡單,讀者可根據(jù)官方文檔和例子自行實(shí)踐。這里主要介紹服務(wù)器模式,并可以實(shí)現(xiàn)帶參數(shù)的查詢。
系統(tǒng)界面如下圖:

上圖中是使用Bootstrap-Table實(shí)現(xiàn)的一個(gè)界面,并帶有一個(gè)輸入框和查詢按鈕。在輸入框中輸入單號,點(diǎn)擊查詢可以到后臺進(jìn)行查詢,再把查詢結(jié)果的數(shù)據(jù)顯示到表格中。由于數(shù)據(jù)庫中數(shù)據(jù)較少,為了看到效果,所以每頁設(shè)置顯示一條數(shù)據(jù)。
以下是前端界面代碼:
首先引入相應(yīng)的JS和CSS文件。定義一個(gè)表格標(biāo)簽,配置相關(guān)的boostrap-table屬性,在此省略了列的代碼。
<link href="css/bootstrap.min.css" rel="stylesheet" type="text/css">
<link href="css/bootstrap-table.min.css" rel="stylesheet" type="text/css">
<script src="js/jquery.min.js"></script>
<script src="js/bootstrap.min.js"></script>
<script src="js/plugins/bootstrap-table.min.js"></script>
<script src="js/plugins/bootstrap-table-zh-CN.js"></script>
<table class="table table-hover" id="cusTable"
data-pagination="true"
data-show-refresh="true"
data-show-toggle="true"
data-showColumns="true">
<thead>
<tr>
<th data-field="sellRecordId" data-sortable="true">
銷售記錄id
</th>
<th data-field="srNumber" >
銷售單號
</th>
<!-- 在此省略表格列的代碼,代碼和上面差不多 -->
<th class="col-xs-2" data-field="action" data-formatter="actionFormatter" data-events="actionEvents">Action</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
以下是JavaScript代碼:定義了一個(gè)函數(shù)initTable()用于初始化表格。第7行method指定了請求的提交方式,我嘗試了設(shè)置為post提交,結(jié)果發(fā)現(xiàn)后端取不到查詢參數(shù),不知道為什么,所以使用get提交。第8行url設(shè)置你要提交請求的地址,這里在JSP中使用了C標(biāo)簽。第17行指定了服務(wù)端模式加載數(shù)據(jù)。第20行指定了查詢參數(shù)的類型,可以設(shè)置為undefined或limit,不同的設(shè)置可以在queryParams的函數(shù)中獲取不同的參數(shù)。第23-25行分別獲取了頁碼、每頁記錄數(shù)、查詢條件,作為查詢的參數(shù)返回。這里只有一個(gè)條件,如果要多條件查詢的話,只需獲得多個(gè)條件即可。第40行在ready中調(diào)用函數(shù)獲取后端數(shù)據(jù)顯示在表格中。第43行為查詢按鈕綁定了一個(gè)單擊事件,當(dāng)輸入單號并點(diǎn)擊查詢時(shí)執(zhí)行。由于查詢是在第一次加載表格之后才有的動(dòng)作,所以在第4行中要先調(diào)用bootstrap-table提供的函數(shù)銷毀表格,不然點(diǎn)擊查詢時(shí)無法到后臺加載數(shù)據(jù)。
<script type="text/javascript">
function initTable() {
//先銷毀表格
$('#cusTable').bootstrapTable('destroy');
//初始化表格,動(dòng)態(tài)從服務(wù)器加載數(shù)據(jù)
$("#cusTable").bootstrapTable({
method: "get", //使用get請求到服務(wù)器獲取數(shù)據(jù)
url: "<c:url value='/SellServlet?act=ajaxGetSellRecord'/>", //獲取數(shù)據(jù)的Servlet地址
striped: true, //表格顯示條紋
pagination: true, //啟動(dòng)分頁
pageSize: 1, //每頁顯示的記錄數(shù)
pageNumber:1, //當(dāng)前第幾頁
pageList: [5, 10, 15, 20, 25], //記錄數(shù)可選列表
search: false, //是否啟用查詢
showColumns: true, //顯示下拉框勾選要顯示的列
showRefresh: true, //顯示刷新按鈕
sidePagination: "server", //表示服務(wù)端請求
//設(shè)置為undefined可以獲取pageNumber,pageSize,searchText,sortName,sortOrder
//設(shè)置為limit可以獲取limit, offset, search, sort, order
queryParamsType : "undefined",
queryParams: function queryParams(params) { //設(shè)置查詢參數(shù)
var param = {
pageNumber: params.pageNumber,
pageSize: params.pageSize,
orderNum : $("#orderNum").val()
};
return param;
},
onLoadSuccess: function(){ //加載成功時(shí)執(zhí)行
layer.msg("加載成功");
},
onLoadError: function(){ //加載失敗時(shí)執(zhí)行
layer.msg("加載數(shù)據(jù)失敗", {time : 1500, icon : 2});
}
});
}
$(document).ready(function () {
//調(diào)用函數(shù),初始化表格
initTable();
//當(dāng)點(diǎn)擊查詢按鈕的時(shí)候執(zhí)行
$("#search").bind("click", initTable);
});
</script>
后端servlet代碼:
在servlet中獲取act參數(shù)后,調(diào)用如下代碼。然后調(diào)用service業(yè)務(wù)邏輯進(jìn)行查找,service中進(jìn)行判斷,是否orderNum為空字符串,如果為空則不帶orderNum參數(shù)查詢,如果不會空則要帶orderNum條件查詢。service中調(diào)用dao,dao中的函數(shù)也要根據(jù)orderNum參數(shù)是否為空而生成不同的SQL語句和查詢參數(shù)。第23行將查詢的記錄轉(zhuǎn)成json字符串,第25行得到滿足條件的總的記錄數(shù)。注意第28行設(shè)置了返回前端的json,這里需要返回兩個(gè)參數(shù),一個(gè)是total,表示總記錄數(shù),一個(gè)是rows,表示表格數(shù)據(jù)。
/**
* 根據(jù)頁碼和每頁記錄數(shù),以及查詢條件動(dòng)態(tài)加載銷售記錄
* @param request
* @param response
* @throws IOException
* @author lzx
*/
private void ajaxGetSellRecord(HttpServletRequest request,
HttpServletResponse response) throws IOException {
response.setCharacterEncoding("utf-8");
PrintWriter pw = response.getWriter();
//得到客戶端傳遞的頁碼和每頁記錄數(shù),并轉(zhuǎn)換成int類型
int pageSize = Integer.parseInt(request.getParameter("pageSize"));
int pageNumber = Integer.parseInt(request.getParameter("pageNumber"));
String orderNum = request.getParameter("orderNum");
//分頁查找商品銷售記錄,需判斷是否有帶查詢條件
List<SimsSellRecord> sellRecordList = null;
sellRecordList = sellRecordService.querySellRecordByPage(pageNumber, pageSize, orderNum);
//將商品銷售記錄轉(zhuǎn)換成json字符串
String sellRecordJson = sellRecordService.getSellRecordJson(sellRecordList);
//得到總記錄數(shù)
int total = sellRecordService.countSellRecord(orderNum);
//需要返回的數(shù)據(jù)有總記錄數(shù)和行數(shù)據(jù)
String json = "{\"total\":" + total + ",\"rows\":" + sellRecordJson + "}";
pw.print(json);
}
以上所述是小編給大家介紹的 Bootstrap Table從服務(wù)器加載數(shù)據(jù)進(jìn)行顯示的實(shí)現(xiàn)方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
JS如何遍歷帶有子集的數(shù)組集合(嵌套數(shù)組)
這篇文章主要介紹了JS如何遍歷帶有子集的數(shù)組集合(嵌套數(shù)組)問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06
javascript 中關(guān)于array的常用方法詳解
這篇文章主要介紹了javascript 中關(guān)于array的常用方法的相關(guān)資料,需要的朋友可以參考下2017-05-05
一次圍繞setTimeout的前端面試經(jīng)驗(yàn)分享
這篇文章主要跟大家分享了一次圍繞setTimeout展開的前端面試經(jīng)驗(yàn),是一篇有意思的圍繞setTimeout展開的前端開發(fā)考題,考察了for循環(huán)、定時(shí)器setTimeout()、JavaScript閉包、匿名函數(shù)和Promise等,一不小心你可能就會做錯(cuò),快來看看你有沒有掌握了上面的知識。2017-06-06
JavaScript垃圾回收機(jī)制(引用計(jì)數(shù),標(biāo)記清除,性能優(yōu)化)
這篇文章主要介紹了JavaScript垃圾回收機(jī)制(引用計(jì)數(shù),標(biāo)記清除,性能優(yōu)化),垃圾回收是JavaScript的隱藏機(jī)制,我們通常無需為垃圾回收勞心費(fèi)力,只需要專注功能的開發(fā)就好了2022-07-07
JS實(shí)現(xiàn)5秒鐘自動(dòng)封鎖div層的方法
這篇文章主要介紹了JS實(shí)現(xiàn)5秒鐘自動(dòng)封鎖div層的方法,涉及javascript針對div層操作的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-02-02
JavaScript數(shù)組排序功能簡單實(shí)現(xiàn)
這篇文章主要介紹了JavaScript數(shù)組排序功能簡單實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
常見Ajax下載文件方式以及報(bào)錯(cuò)解決辦法
AJAX(Asynchronous JavaScript and XML)是一種用于創(chuàng)建快速、動(dòng)態(tài)和交互式網(wǎng)頁的技術(shù),它的主要優(yōu)勢在于能夠在不刷新整個(gè)網(wǎng)頁的情況下與服務(wù)器進(jìn)行數(shù)據(jù)交互,這篇文章主要給大家介紹了關(guān)于常見Ajax下載文件方式以及報(bào)錯(cuò)解決辦法的相關(guān)資料,需要的朋友可以參考下2024-01-01
使用ESLint禁止項(xiàng)目導(dǎo)入特定模塊的方法步驟
這篇文章主要介紹了使用ESLint禁止項(xiàng)目導(dǎo)入特定模塊的方法步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-03-03

