Maison >interface Web >Tutoriel d'amorçage >Une brève discussion sur l'utilisation de Bootstrap-table

Une brève discussion sur l'utilisation de Bootstrap-table

青灯夜游
青灯夜游avant
2021-03-10 10:36:1113501parcourir

Cet article vous présentera l'utilisation de Bootstrap-table. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Une brève discussion sur l'utilisation de Bootstrap-table

Recommandations associées : "Tutoriel bootstrap"

1. Qu'est-ce que Bootstrap-table ?

Dans le développement de systèmes d'entreprise, les requêtes, la pagination, le tri et d'autres traitements des enregistrements de table sont très courants. Dans le développement Web, de nombreux plug-ins puissants peuvent être utilisés pour répondre aux exigences et peuvent grandement améliorer l'efficacité du développement, cet essai présente bootstrap-table, un plug-in de table open source très célèbre et largement utilisé dans de nombreux projets. Le plug-in Bootstrap-table fournit un ensemble très riche d'attributs, qui peuvent implémenter des requêtes, des paginations, des tris, des cases à cocher, la configuration des colonnes d'affichage, la vue Carte, l'affichage de tables maître-esclave, la fusion de colonnes, le traitement d'internationalisation et d'autres fonctions de traitement. et le plug-in En même temps, il fournit également de bonnes fonctions d'extension, telles que le déplacement des lignes, le déplacement des positions des colonnes et d'autres fonctions spéciales. Le plug-in peut être défini à l'aide de l'identifiant d'attribut data-* basé sur HTML5, ou. il peut être configuré en utilisant Javascript, ce qui est très pratique. Cet essai présente l'application du plug-in bootstrap-table dans mon projet actuel et résume l'expérience dans la gestion des problèmes rencontrés lors d'une utilisation associée.

2. Comment utiliser Bootstrap-table ?

Bootstrap-Table propose deux manières d'afficher les données dans la table, l'une en mode client et l'autre en mode serveur.

Mode client : fait référence au chargement des données à afficher dans le tableau en une seule fois sur le serveur, puis à leur conversion au format JSON et à leur transmission à l'interface à afficher. Le mode client est relativement simple. Les données sont chargées une fois et placées sur l'interface, puis la pagination est automatiquement générée en fonction du nombre d'enregistrements par page que vous avez défini. Lorsque vous cliquez sur la deuxième page, les données seront automatiquement chargées et plus aucune requête ne sera envoyée au serveur. Dans le même temps, les utilisateurs peuvent utiliser leur propre fonction de recherche pour effectuer une recherche complète des données. Cette méthode peut être utilisée lorsque la quantité de données est faible.

Mode serveur : fait référence à l'envoi de données au serveur pour une requête en fonction du nombre défini d'enregistrements par page et du numéro de page actuel à afficher, puis à son affichage dans le tableau. Cette méthode peut charger dynamiquement des données en fonction des besoins de l'utilisateur, économisant ainsi les ressources du serveur, mais elle ne peut pas utiliser sa propre fonction de recherche de données complète.

Bootstrap-table est un plug-in développé sur la base de Boosttrap, donc lorsque vous l'utilisez, vous devez introduire des scripts et des styles Bootstrap.

Si les fichiers pertinents ne sont pas introduits dans notre projet, vous devez introduire ces fichiers de style et de script, comme indiqué ci-dessous.

<link>
<script></script>
<script></script>

Puis la référence de dépendance de Bootstrap-table :

Introduction au fichier CSS

<link>

Introduction au fichier de script

<script></script>

<script></script>

Utilisation de bootstrap-table dans la page , peut être divisé en deux types, l'un est purement écrit en HTML5 et spécifie divers paramètres d'attribut via data-*, et l'autre est HTML+JS pour obtenir des paramètres flexibles.

Si on initialise le code HTML à l'aide du logo HTML5, il s'agit du code suivant.



    
        
            
            
            
        
    
Item IDItem NameItem Price

Si nous utilisons du code JS pour initialiser le plug-in de table, il nous suffit alors de déclarer un objet table en HTML, comme indiqué dans le code suivant.


le code js est le suivant :

$('#table').bootstrapTable({
    url: 'data1.json',
    columns: [{
        field: 'id',
        title: 'Item ID'
    }, {
        field: 'name',
        title: 'Item Name'
    }, {
        field: 'price',
        title: 'Item Price'
    }, ]
});

Cependant, en fait, la fonction de configuration JS que nous utilisons bootstrap-table est certainement beaucoup plus compliquée que cela. L'effet d'interface suivant est l'affichage des données. du tableau réel.

Une brève discussion sur lutilisation de Bootstrap-table

3. Explication détaillée de la table Bootstrap :

1) Configuration complète des attributs JS

L'image ci-dessus est un exemple. L'image ci-dessus montre le résultat. Le code JS est le suivant :

var $table;
        //初始化bootstrap-table的内容
        function InitMainTable () {
            //记录页面bootstrap-table全局变量$table,方便应用
            var queryUrl = '/TestUser/FindWithPager?rnd=' + Math.random()
            $table = $('#grid').bootstrapTable({
                url: queryUrl,                      //请求后台的URL(*)
                method: 'GET',                      //请求方式(*)
                //toolbar: '#toolbar',              //工具按钮用哪个容器
                striped: true,                      //是否显示行间隔色
                cache: false,                       //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
                pagination: true,                   //是否显示分页(*)
                sortable: true,                     //是否启用排序
                sortOrder: "asc",                   //排序方式
                sidePagination: "server",           //分页方式:client客户端分页,server服务端分页(*)
                pageNumber: 1,                      //初始化加载第一页,默认第一页,并记录
                pageSize: rows,                     //每页的记录行数(*)
                pageList: [10, 25, 50, 100],        //可供选择的每页的行数(*)
                search: false,                      //是否显示表格搜索
                strictSearch: true,
                showColumns: true,                  //是否显示所有的列(选择显示的列)
                showRefresh: true,                  //是否显示刷新按钮
                minimumCountColumns: 2,             //最少允许的列数
                clickToSelect: true,                //是否启用点击选中行
                //height: 500,                      //行高,如果没有设置height属性,表格自动根据记录条数觉得表格高度
                uniqueId: "ID",                     //每一行的唯一标识,一般为主键列
                showToggle: true,                   //是否显示详细视图和列表视图的切换按钮
                cardView: false,                    //是否显示详细视图
                detailView: false,                  //是否显示父子表
                //得到查询的参数
                queryParams : function (params) {
                    //这里的键的名字和控制器的变量名必须一致,这边改动,控制器也需要改成一样的
                    var temp = {
                        rows: params.limit,                         //页面大小
                        page: (params.offset / params.limit) + 1,   //页码
                        sort: params.sort,      //排序列名
                        sortOrder: params.order //排位命令(desc,asc)
                    };
                    return temp;
                },
                columns: [{
                    checkbox: true,
                    visible: true                  //是否显示复选框
                }, {
                    field: 'Name',
                    title: '姓名',
                    sortable: true
                }, {
                    field: 'Mobile',
                    title: '手机',
                    sortable: true
                }, {
                    field: 'Email',
                    title: '邮箱',
                    sortable: true,
                    formatter: emailFormatter
                }, {
                    field: 'Homepage',
                    title: '主页',
                    formatter: linkFormatter
                }, {
                    field: 'Hobby',
                    title: '兴趣爱好'
                }, {
                    field: 'Gender',
                    title: '性别',
                    sortable: true
                }, {
                    field: 'Age',
                    title: '年龄'
                }, {
                    field: 'BirthDate',
                    title: '出生日期',
                    formatter: dateFormatter
                }, {
                    field: 'Height',
                    title: '身高'
                }, {
                    field: 'Note',
                    title: '备注'
                }, {
                    field:'ID',
                    title: '操作',
                    width: 120,
                    align: 'center',
                    valign: 'middle',
                    formatter: actionFormatter
                }, ],
                onLoadSuccess: function () {
                },
                onLoadError: function () {
                    showTips("数据加载失败!");
                },
                onDblClickRow: function (row, $element) {
                    var id = row.ID;
                    EditViewById(id, 'view');
                },
            });
        };

Les propriétés de configuration du code JS ci-dessus sont essentiellement commentées, ce qui est relativement facile à comprendre.

2) Requête et pagination

La pagination des données de la table ici utilise la pagination du serveur. Les enregistrements de données sont renvoyés par le serveur en fonction des conditions de recherche et la méthode de tri est utilisée ici. les paramètres sont les paramètres soumis au serveur.

//得到查询的参数
queryParams : function (params) {
//这里的键的名字和控制器的变量名必须一直,这边改动,控制器也需要改成一样的
     var temp = {
           rows: params.limit,                         //页面大小
           page: (params.offset / params.limit) + 1,   //页码
           sort: params.sort,      //排序列名
           sortOrder: params.order //排位命令(desc,asc)
     };
   return temp;
},

De plus, nous voyons que l'interface d'adresse URL pour renvoyer les données est FindWithPager. Voyons comment cette méthode de contrôleur MVC gère le retour de données.

/// <summary>
        /// 根据条件查询数据库,并返回对象集合(用于分页数据显示)
        /// </summary>
        /// <returns>指定对象的集合</returns>
        public override ActionResult FindWithPager()
        {
            //检查用户是否有权限,否则抛出MyDenyAccessException异常
            base.CheckAuthorized(AuthorizeKey.ListKey);

            string where = GetPagerCondition();
            PagerInfo pagerInfo = GetPagerInfo();
            var sort = GetSortOrder();

            List<testuserinfo> list = null;
            if (sort != null && !string.IsNullOrEmpty(sort.SortName))
            {
                list = baseBLL.FindWithPager(where, pagerInfo, sort.SortName, sort.IsDesc);
            }
            else
            {
                list = baseBLL.FindWithPager(where, pagerInfo);
            }

            //Json格式的要求{total:22,rows:{}}
            //构造成Json的格式传递
            var result = new { total = pagerInfo.RecordCount, rows = list };
            return ToJsonContent(result);
        }</testuserinfo>

Le code ci-dessus traite deux parties des informations sur les objets, l'une concerne les informations de classe d'entité de pagination et l'autre trie les informations, puis obtient des enregistrements en fonction de ces conditions et renvoie les données JSON dans un format similaire à

{total:22,rows:{}}

Enregistrer.

var result = new { total = pagerInfo.RecordCount, rows = list };
return ToJsonContent(result);

Le code pour obtenir les informations du paramètre de pagination est le suivant

/// <summary>
        /// 根据Request参数获取分页对象数据
        /// </summary>
        /// <returns></returns>
        protected virtual PagerInfo GetPagerInfo()
        {
            int pageIndex = Request["page"] == null ? 1 : int.Parse(Request["page"]);
            int pageSize = Request["rows"] == null ? 10 : int.Parse(Request["rows"]);

            PagerInfo pagerInfo = new PagerInfo();
            pagerInfo.CurrenetPageIndex = pageIndex;
            pagerInfo.PageSize = pageSize;

            return pagerInfo;
        }

Le code pour obtenir les informations du paramètre de tri est le suivant

/// <summary>
        /// 获取排序的信息
        /// </summary>
        /// <returns></returns>
        protected SortInfo GetSortOrder()
        {
            var name = Request["sort"];
            var order = Request["sortOrder"];
            return new SortInfo(name, order);
        }

La dernière étape consiste à implémenter des conditions, numéros de page spécifiques et tri spécifique Les données sous les conditions sont enregistrées. Cette partie peut implémenter une logique selon vos propres besoins. Ici, nous donnons simplement un appel de traitement encapsulé.

baseBLL.FindWithPager(where, pagerInfo, sort.SortName, sort.IsDesc);

 实际情况下,我们列表的展示,一般需要使用不同的条件进行数据的查询的,虽然这个Bootstrap-table控件提供了一个默认的查询按钮,不过一般是在客户端分页的情况下使用,而且略显简单,我们一般使用自己查询条件进行处理,如下界面所示。

或者如下:

那么这样对于上面的js属性就需要调整下接受查询条件参数queryParams 了

//得到查询的参数
                queryParams : function (params) {
                    //这里的键的名字和控制器的变量名必须一直,这边改动,控制器也需要改成一样的
                    var temp = {
                        rows: params.limit,                         //页面大小
                        page: (params.offset / params.limit) + 1,   //页码
                        sort: params.sort,      //排序列名
                        sortOrder: params.order //排位命令(desc,asc)
                    };
                    return temp;
                },

 对于自定义查询条件,我们可以用下面的常规方式增加参数,如下所示

但是查询条件的参数我们不方便一一设置,我们想通过一种较为快捷的方式来处理,那么就需要对这个处理方式进行一个特别的修改了,首先添加一个扩展函数来处理表单的条件(参考博客http://www.cnblogs.com/zcsj/p/6635677.html的介绍)

//自定义函数处理queryParams的批量增加
        $.fn.serializeJsonObject = function () {
            var json = {};
            var form = this.serializeArray();
            $.each(form, function () {
                if (json[this.name]) {
                    if (!json[this.name].push) {
                        json[this.name] = [json[this.name]];
                    }
                    json[this.name].push();
                } else {
                    json[this.name] = this.value || '';
                }
            });
            return json;
        }

 然后我们就可以批量处理表单的查询条件了

queryParams : function (params) {
                    //这里的键的名字和控制器的变量名必须一直,这边改动,控制器也需要改成一样的
                    var temp = $("#ffSearch").serializeJsonObject();
                    temp["rows"] = params.limit;                        //页面大小
                    temp["page"] = (params.offset / params.limit) + 1;  //页码
                    temp["sort"] = params.sort;                         //排序列名
                    temp["sortOrder"] = params.order;                   //排位命令(desc,asc)

                    //特殊格式的条件处理
                    temp["WHC_Age"] = $("#WHC_Age").val() + "~" + $("#WHC_Age2").val();
                    temp["WHC_BirthDate"] = $("#WHC_BirthDate").val() + "~" + $("#WHC_BirthDate2").val();

                    return temp;
                },

然后后端统一按照逻辑处理查询参数即可。

3)格式化输出函数及其他

对于上面JS的配置信息,我们再来回顾一下,例如对于数据转义函数,可以格式化输出的内容的,如下界面代码。

格式化的数据转义函数如下,主要就是根据内容进行格式化输出的JS函数,好像是需要放在一个文件内。

//连接字段格式化
        function linkFormatter(value, row, index) {
            return "<a>" + value + "</a>";
        }
        //Email字段格式化
        function emailFormatter(value, row, index) {
            return "<a>" + value + "</a>";
        }
        //性别字段格式化
        function sexFormatter(value) {
            if (value == "女") { color = 'Red'; }
            else if (value == "男") { color = 'Green'; }
            else { color = 'Yellow'; }

            return '<div>' + value + '</div>';
        }

 另外,我们看到行记录的最后增加了几个操作按钮,方便对当前记录的查看、编辑和删除操作,如下效果图所示。

这部分我们也是通过格式化函数进行处理的

//操作栏的格式化
        function actionFormatter(value, row, index) {
            var id = value;
            var result = "";
            result += "<a><span></span></a>";
            result += "<a><span></span></a>";
            result += "<a><span></span></a>";

            return result;
        }

  如果我们需要双击弹出编辑界面的层,我们可以处理表格的双击事件,如下代码所示。

onDblClickRow: function (row, $element) {
                    var id = row.ID;
                    EditViewById(id, 'view');
                },

 

如果我们需要设置行的不同的样式展示,可以通过增加rowStyle的JS处理函数即可,如下代码所示

rowStyle: function (row, index) { //设置行的特殊样式
                    //这里有5个取值颜色['active', 'success', 'info', 'warning', 'danger'];
                    var strclass = "";
                    if (index == 0) {
                        strclass = "warning";
                    }
                    return { classes: strclass }
                }

  对于表格记录的获取,我们可以通过下面的代码进行获取:$table.bootstrapTable('getSelections')

var rows = $table.bootstrapTable('getSelections');
           if (rows.length > 0) {
               ID = rows[0].ID;
           }

 如果是多条记录的处理,例如删除记录

//实现删除数据的方法
        function Delete() {
            var ids = "";//得到用户选择的数据的ID
            var rows = $table.bootstrapTable('getSelections');
            for (var i = 0; i <p> 如果需要设置显示列显示,如下界面所示</p><p><img src="https://img.php.cn/upload/article/000/000/024/1968db7ccb24c5175e6b512853157d6a-8.png" alt=""></p><p>以及排序处理</p><p><img src="https://img.php.cn/upload/article/000/000/024/1968db7ccb24c5175e6b512853157d6a-9.png" alt=""></p><p>这些需要在JS代码开启相关的属性即可。</p><p><img src="https://img.php.cn/upload/article/000/000/024/1968db7ccb24c5175e6b512853157d6a-10.png" alt=""></p><p>还有就是一种CardView的卡片视图格式,如下所示。</p><p><img src="https://img.php.cn/upload/article/000/000/024/6963891c8b828c775579d23bea64c194-1Une%20br%C3%A8ve%20discussion%20sur%20lutilisation%20de%20Bootstrap-table" alt=""></p><p>另外一种是父子表的展开明细的格式,如下所示</p><p><img src="https://img.php.cn/upload/article/000/000/024/6963891c8b828c775579d23bea64c194-12.png" alt=""></p><p> 以上就是bootstrap-table插件在我实际项目中的应用情况,基本上对JS各个属性的使用进行了一些介绍了,具体的应用我们可以参考它的文档,获取对应属性、方法、事件的详细说明,这样我们就可以更加详细的应用这个插件的各种功能了。</p><p> http://bootstrap-table.wenzhixin.net.cn/documentation/</p><p>PS:以上为转载内容,经过自己的梳理后重新发布,感谢原作者伍华聪,原文路径:https://www.cnblogs.com/wuhuacong/p/7284420.html</p><h2>四、怎么在Spring MVC及SpringBoot项目中使用Bootstrap-table进行分页?</h2><p id="前端代码块">话不多说,直接上代码。</p><p>前端代码块:</p><pre class="brush:php;toolbar:false">页面:  
   JS:   function initTable(){               $('#test-table').bootstrapTable({                   method: 'get',                   toolbar: '#toolbar',    //工具按钮用哪个容器                   striped: true,      //是否显示行间隔色                   cache: false,      //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)                   pagination: true,     //是否显示分页(*)                   sortable: false,      //是否启用排序                  sortOrder: "asc",     //排序方式                  pageNumber:,      //初始化加载第一页,默认第一页                  pageSize: ,      //每页的记录行数(*)                  pageList: [, , , ],  //可供选择的每页的行数(*)                  url: "/testProject/pagelist.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: ,    //最少允许的列数                  clickToSelect: true,    //是否启用点击选中行                  searchOnEnterKey: true,                  columns: [{                      field: 'id',                      title: 'id',                      align: 'center'                  }, {                      field: 'testkey',                      title: '测试标识',                      align: 'center'                  }, {                      field: 'testname',                      title: '测试名字',                      align: 'center'                  },{                      field: 'id',                      title: '操作',                      align: 'center',                      formatter:function(value,row,index){                          //通过formatter可以自定义列显示的内容                          //value:当前field的值,即id                          //row:当前行的数据                          var 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);

    }</mwmsgtype>

 完成上述代码,即可实现服务器端自动分页,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映射参数获取

更多编程相关知识,请访问:编程视频!!

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer