English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Préambule
Basé sur SpringMVC+Bootstrap+DataTables réalise la pagination côté serveur des tableaux de données, la recherche floue (non DataTable Search), et l'actualisation asynchrone de la page.
Remarque : le tag sp:message utilise l'internationalisation de SpringMVC
effet
tableau DataTable
Recherche de mots-clés
Recherche de mots-clés personnalisée, non DataTable Search
code
code HTML
code des conditions de recherche
<!-- recherche, ajout, suppression en lot, exportation, actualisation --> <div class="row-fluid"> <div class="pull-right"> <div class="btn-group"> <button type="button" class="btn btn-primary btn-sm" id="btn-add"> <i class="fa fa-plus"></i> <sp:message code="sys.add"/> </button> <button type="button" class="btn btn-primary btn-sm" id="btn-delAll"> <i class="fa fa-remove"></i> <sp:message code="sys.delAll"/> </button> <button type="button" class="btn btn-primary btn-sm" id="btn-export"> <i class="fa fa-sign-in"></i> <sp:message code="sys.export"/> </button> <button type="button" class="btn btn-primary btn-sm" id="btn-re"> <i class="fa fa-refresh"></i> <sp:message code="sys.refresh"/> </button> </div> </div> <div class="row"> <form id="queryForm" action="<%=path%>/goodsType/method="post"> <div class="col"}-xs-2"> <input type="text" id="keyword" name="keyword" class="form-control input-sm" placeholder="<sp:message code="sys.keyword"/>"> </div> <button type="button" class="btn btn-primary btn-sm" id="btn-query"> <i class="fa fa-search"></i> <sp:message code="sys.query"/> </button> </form> </div> </div>
Code du tableau des données
<table id="dataTable" class="table table-striped table-bordered table-hover table-condensed" align="center"> <thead> <tr class="info"> <td><input type="checkbox" id="checkAll"></td> <th><sp:message code="sys.no"/></th> <th><sp:message code="goods.type.name.cn"/></th> <th><sp:message code="goods.type.name.en"/></th> <th><sp:message code="sys.create.time"/></th> <th><sp:message code="sys.update.time"/></th> <th><sp:message code="sys.oper"/></th> </tr> </thead> </table>
Code JS
Initialisation DataTables, requête de données serveur, encapsulation des conditions de recherche
<!-- page script --> <script> $(function () { //Ajouter, modifier l'adresse de soumission asynchrone var url = ""; var tables = $("#dataTable").dataTable({ serverSide: true,//Placer la pagination, la récupération des données, etc. sur le serveur processing: true,//Lors du chargement des données, affiche-t-on "En cours de chargement" ? pageLength: 10, //nombre de lignes de données à charger pour la première fois ordering: false, //les opérations de tri sont effectuées sur le serveur, donc vous pouvez les désactiver. pagingType: "full_numbers", autoWidth: false, stateSave: true,//conserver l'état de pagination, utilisez-le avec comTable.fnDraw(false); searching: false,//désactiver la recherche de datatables ajax: { url: "<%=path%>/goodsType/getData", dataSrc: "data", data: function (d) { var param = {}; param.draw = d.draw; param.start = d.start; param.length = d.length; var formData = $("#queryForm").serializeArray();//sérialiser les données du form en tableau formData.forEach(function (e) { param[e.name] = e.value; }); return param;//paramètres personnalisés à transmettre. }, }, columns: [//correspondant à la séquence dans thead {"data": null,"width":"10px"}, {"data": null}, {"data": 'typeNameCn' }, {"data": 'typeNameEn' }, {"data": 'createTime', "render":function(data,type,full,callback) { return data.substr(0,19) } }, {"data": 'updateTime', defaultContent: "", "render":function(data,type,full,callback) { if(data != null && data != ""){ return data.substr(0,19) } return data; } } }, {"data": null,"width":"60px"} ], //boutons d'opération columnDefs: [ { targets: 0, defaultContent: "<input type='checkbox' name='checkList'>" }, { targets: -1, defaultContent: "<div class='btn"-group'>"+ ""+ ""+ "
Code Java
Méthode de traitement du contrôleur, responsable de la recherche de données de tableau de page, formatage du Json et retour.
@RequestMapping(value="/goodsType/getData", produces = "text/json;charset=UTF-8") @ResponseBody public String getData(HttpServletRequest request, QueryCondition query) { DatatablesView<GoodsType> dataTable = goodsTypeService.getGoodsTypeByCondition(query); dataTable.setDraw(query.getDraw()); String data = JSON.toJSONString(dataTable); return data; }
Format du Json retourné
{ "data": [{ "createTime": "2016-10-27 09:42:28.0", "typeId": 96824775296417986, "typeIdStr": "96824775296417986", "typeNameCn": "食品", "typeNameEn": "Foods", "updateTime": "2016-10-28 13:00:24.0" }, { "createTime": "2016-10-27 09:42:27.0", "typeId": 96824775296417979, "typeIdStr": "96824775296417979", "typeNameCn": "汽车" "typeNameEn": "Cars123", "updateTime": "2016-10-27 09:51:24.0" }], "draw": 1, "recordsFiltered": 17, "recordsTotal": 17 }
DatatablesView, définissant le format nécessaire selon DataTables
public class DatatablesView<T> { private List<T> data; //data correspond à "dataSrc" chargé par datatales private int recordsTotal; private int recordsFiltered; private int draw; public DatatablesView() { } public int getDraw() { return draw; } public void setDraw(int draw) { this.draw = draw; } public List<T> getData() { return data; } public void setData(List<T> data) { this.data = data; } public int getRecordsTotal() { return recordsTotal; } public void setRecordsTotal(int recordsTotal) { this.recordsTotal = recordsTotal; this.recordsFiltered = recordsTotal; } public int getRecordsFiltered() { return recordsFiltered; } public void setRecordsFiltered(int recordsFiltered) { this.recordsFiltered = recordsFiltered; } }
Classe de service de traitement des affaires, principalement basée sur les conditions de recherche pour estimer le nombre d'enregistrements, rechercher la liste des données de la page actuelle
public DatatablesView<GoodsType> getGoodsTypeByCondition(QueryCondition query) { DatatablesView<GoodsType> dataView = new DatatablesView<GoodsType>(); //Construire les conditions de recherche WherePrams where = goodsTypeDao.structureConditon(query); Long count = goodsTypeDao.count(where); List<GoodsType> list = goodsTypeDao.list(where); dataView.setRecordsTotal(count.intValue()); dataView.setData(list); return dataView; }
La couche Dao est l'opération de recherche de base de données, voici la suppression...
Fin
Les conditions de recherche utilisent ici uniquement la recherche floue des mots-clés. Selon les besoins du business, d'autres conditions de recherche peuvent être ajoutées dynamiquement. Le backend doit effectuer le traitement correspondant.
Ce que j'ai décrit ici est un tutoriel basé sur SpringMVC+Bootstrap+DataTables réalise la pagination et la recherche floue du serveur des tableaux, j'espère que cela pourrait être utile à tout le monde. Si vous avez des questions, n'hésitez pas à laisser un message, l'éditeur vous répondra rapidement !
Déclaration : le contenu de cet article est hébergé sur Internet et appartient aux auteurs originaux. Le contenu est contribué et téléchargé par les utilisateurs d'Internet. Le site Web ne détient pas de droits de propriété, n'a pas été édité par l'homme et n'assume aucune responsabilité juridique connexe. Si vous trouvez du contenu suspect en matière de droits d'auteur, veuillez envoyer un e-mail à notice#w3Pour signaler une violation, veuillez envoyer un e-mail à codebox.com (remplacez # par @) et fournir des preuves pertinentes. Si les violations sont confirmées, le site supprimera immédiatement le contenu suspect.