Spring boot - bootstrap 和 thymeleaf 排序表

Posted

技术标签:

【中文标题】Spring boot - bootstrap 和 thymeleaf 排序表【英文标题】:Spring boot - bootstrap and thymeleaf sort table 【发布时间】:2020-11-08 10:00:45 【问题描述】:

我有一个 Spring Boot 应用程序,它使用 thyemeleaf 进行 html 和 boostrap 进行设计。

我在找可以做以下功能的表

    标题中的排序选项。单击它后,根据特定 col 的值对所有行进行排序 允许在特定行中搜索值 限制页面中显示的行。例如。第 1 页显示 30 行,点击 2 显示 30 行

我环顾四周,看到了 javascript 的用法,但我不确定如何使用 Javascript。如有帮助,请提供任何帮助!

<!DOCTYPE html>

<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<link rel="stylesheet"
    href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"
    integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh"
    crossorigin="anonymous">
<title>Home</title>
</head>
<body>



    <div class="jumbotron">
    
        <h1 class="display-4">Coronavius tracker application</h1>
    
        <p class="lead">This application tracks the coronavirus situation around the globe</p>

        <hr class="my-4">
        <div class="container">
    
            <div class="row">
                <div class="col">
                    <h3>
                    <p class="font-weight-bold">Total world cases</p>
                    <!--    p tag takes up the entire width -->
                    <p class="font-weight-bold" th:text="$worldCases"></p>
                    </h3>
                </div>      
            
                <div class="col">
                        <h3>
                    <p class="font-weight-bold">Total world deaths</p>
                    <p class="font-weight-bold"th:text="$worldDeaths"></p>
                    </h3>
                </div>
                <div class="col">
                <h3>
                    <p class="font-weight-bold">World population</p>
                    <p class="font-weight-bold" th:text="$worldPop"></p>
                </h3>
                </div>
            </div>
        </div>
    </div>



    <table class="table table-striped">
        <thead>
            <tr>

                <th scope="col">County</th>
                <th scope="col">Total cases</th>
                <th scope="col">New cases</th>
                <th scope="col">Total deaths</th>
                <th scope="col">Population</th>

            </tr>
        </thead>

        <tbody>
            <tr th:each="item :$alldata">
                <td th:text="$item.country"></td>
                <td th:text="$item.totalCases"></td>
                <td th:text="$item.newCases"></td>
                <td th:text="$item.totalDeaths"></td>
                <td th:text="$item.pop"></td>

            </tr>

        </tbody>
    </table>


</body>
</html>

【问题讨论】:

除了关于如何使用 JavaScript 的一般性要求之外,您还不清楚您在这里要问什么。你能把事情缩小到更具体的事情吗?看看DataTables 和其他类似的解决方案——也许这会有所帮助。 (否则,这个问题太宽泛了,可能会被关闭。) 因为你不懂 js,让我们把它留给 java,对于你想点击的每个标题,你创建一个非常简单的 onClick(你可以在 html 中这样做)去 /sort /byFooHeader。在您的控制器中,您对存储值的集合进行排序、更新模型并重新加载视图。 【参考方案1】:

使用数据表,我能够获得具有所需功能的表。我的代码如附件

<!DOCTYPE html>
<!-- To use thymeleaf -->
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<link rel="stylesheet"
    href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"
    integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh"
    crossorigin="anonymous">
    <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.19/css/jquery.dataTables.min.css">
    <script type="text/javascript" language="javascript" src="https://code.jquery.com/jquery-3.3.1.js"></script>
    <script type="text/javascript" language="javascript" src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>
    <script language="javascript" type="text/javascript">
    $(document).ready( function () 
        $('#dataTable').DataTable();
     );
    </script>
<title>Home</title>
</head> 
<body>


    <!--    Creates a big gray field  -->
    <div class="jumbotron">
        <!-- Big words -->
        <h1 class="display-4">Coronavirus tracker</h1>
        <!--   Big words description -->
        <p class="lead">Tracking this pandemic one at a time</p>
    <!--    Marks bottom part of jumbotron   -->
        <hr class="my-4">
        <div class="container">
        <!-- Gride layout with each col detonated by class ="col" -->
            <div class="row">
                <div class="col">
                    <h3>
                    <p class="font-weight-bold">Total world cases</p>
                    <!--    p tag takes up the entire width -->
                    <p class="font-weight-bold" th:text="$worldCases"></p>
                    <p class="font-weight-bold" th:text="$percentage"></p>
                    </h3>
                </div>      
            
                <div class="col">
                        <h3>
                    <p class="font-weight-bold">Total world deaths</p>
                    <p class="font-weight-bold"th:text="$worldDeaths"></p>
                    </h3>
                </div>
                <div class="col">
                <h3>
                    <p class="font-weight-bold">World population</p>
                    <div class="font-weight-bold" th:text="$worldPop"></div>
                </h3>
                </div>
            </div>
        </div>
    </div>


<!--    @id give id to the table and match the javascript
    @page-length to match the default entries per page
    @data-order to set the default way to display order. It is now 1st col in descending order -->
    <table class="table table-striped" id="dataTable" data-page-length='50' data-order='[[1, "desc"]]'>
        <thead>
            <tr>

                <th scope="col">County</th>
                <th scope="col">Total cases</th>
                <th scope="col">New cases</th>
                <th scope="col">Total deaths</th>
                <th scope="col">Population</th>

            </tr>
        </thead>

        <tbody>
            <tr th:each="item :$alldata">
                <td th:text="$item.country"></td>
                <td th:text="$item.totalCases"></td>
                <td th:text="$item.newCases"></td>
                <td th:text="$item.totalDeaths"></td>
                <td th:text="$item.pop"></td>

            </tr>

        </tbody>
    </table>


</body>
</html>

【讨论】:

以上是关于Spring boot - bootstrap 和 thymeleaf 排序表的主要内容,如果未能解决你的问题,请参考以下文章

spring boot 知识点

Spring Boot 中application.yml与bootstrap.yml的区别

用于发送电子邮件的 Spring Boot API 和 thymeleaf + bootstrap

Bootstrap 4 webjar css 不适用于 Spring Boot + Thymeleaf

Spring boot、JavaMailSender、Thymeleaf 和 Bootstrap:收到的电子邮件是一个纯 HTML 页面

Spring Boot 轮播全屏 html,css,bootstrap