1. 程式人生 > >很多時候犯錯都是在不知情的情況下發生的

很多時候犯錯都是在不知情的情況下發生的

目錄

thymeleaf的定義
spring boot整合
thymeleaf語法參考文件
thymeleaf筆記

thymeleaf比jsp好在哪
thymeleaf簡單檔案
thymeleaf配置 application.properties
thymeleaf url
thymeleaf表示式
themeleaf包含 footer
themeleaf條件 if
themeleaf 遍歷
thymeleaf內建工具
thymeleaf分頁

thymeleaf的定義

Thymeleaf是一種用於Web和獨立環境的現代伺服器端的Java模板引擎。主要目標是將優雅的自然模板帶到開發工作流程中,並將HTML在瀏覽器中正確顯示

,並且可以作為靜態原型,讓開發團隊能更容易地協作。Thymeleaf使用Spring框架的模組,與許多常見的工具整合在一起,並且可以插入自己的功能,能夠處理HTML,XML,JavaScript,CSS,TEXT,RAW六種模板模式

spring boot整合

  1. 新建spring boot的web專案
    新增依賴
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-thymeleaf -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
    <version>1.5.2.RELEASE</version>
</dependency>

在spring boot是1.5.X時,thymeleaf依賴要用1.5.x版本,親測用2版本會找不到網頁。

  1. 將html網頁放在templates資料夾下。
  2. controller即可跳轉到html頁面,頁面路徑為以templates為基礎的相對路徑。

thymeleaf語法參考文件

thymeleaf筆記

thymeleaf比jsp好在哪

jsp要在伺服器啟動後轉化為html頁面。不啟動伺服器無法執行出結果。
thymeleaf伺服器不啟動他就已經是html。

thymeleaf簡單檔案

<html xmlns:th="http://www.thymeleaf.org">
<head>#內容與html無異
<p th:text="$name">name</p>
#伺服器端未啟動 顯示name 啟動顯示伺服器端傳來的name值
#字串拼接
<p th:text="|Hello! ${name}|"></p>

thymeleaf配置 application.properties

#thymeleaf 配置
spring.thymeleaf.mode=HTML5
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.content-type=text/html
#快取設定為false, 這樣修改之後馬上生效,便於除錯
spring.thymeleaf.cache=false
#上下文 注意這裡使得所有頁面網址字首都變為下述地址
server.context-path=/thymeleaf

thymeleaf url

引入css檔案

<link rel="stylesheet" type="text/css" media="all" href="../webapp/static/css/style.css" th:href="@{/static/css/style.css}"/>

引入js檔案

<script type="text/javascript" src="../webapp/static/js/thymeleaf.js" th:src="@{/static/js/thymeleaf.js}"></script>

啟動伺服器後 th:src會代替src th:href會代替href

thymeleaf表示式

controller中新增屬性

String htmlContent = "<p style='color:red'> 紅色文字</p>";
m.addAttribute("htmlContent", htmlContent);
Product currentProduct =new Product(5,"product e", 200);
m.addAttribute("currentProduct", currentProduct);

轉義與非轉義

<p th:text="${htmlContent}" ></p>
<p th:utext="${htmlContent}" ></p>

效果

image.png

獲取物件

方式1
<p th:text="${currentProduct}" ></p>
<p th:text="${currentProduct.name}" ></p>
<p th:text="${currentProduct.getName()}" ></p>
方式2
<div class="showing" th:object="${currentProduct}">
<h2>*{}方式顯示屬性</h2>
<p th:text="*{name}" ></p>
</div>

效果

image.png

此外還有算數運算

<p th:text="${currentProduct.price+999}" ></p>

themeleaf包含 footer

<html xmlns:th="http://www.thymeleaf.org">
<footer th:fragment="footer1"> 
   <p >All Rights Reserved</p>
</footer>
<footer th:fragment="footer2(start,now)"> 
   <p th:text="|${start} - ${now} All Rights Reserved|"></p>
</footer>
</html>

使用時按照

<div th:replace="include::footer1" ></div>
<div th:replace="include::footer2(2015,2018)" ></div>

themeleaf條件if

<p th:if="${testBoolean}" >如果testBoolean 是 true ,本句話就會顯示</p>
<p th:if="${not testBoolean}" >取反 ,所以如果testBoolean 是 true ,本句話就不會顯示</p>
<p th:text="${testBoolean}?'當testBoolean為真的時候,顯示本句話,這是用三相表示式做的':''" ></p>

不只是布林值的 true 和 false, th:if 表示式返回其他值時也會被認為是 true 或 false,規則如下:

boolean 型別並且值是 true, 返回 true
數值型別並且值不是 0, 返回 true
字元型別(Char)並且值不是 0, 返回 true
String 型別並且值不是 "false", "off", "no", 返回 true
不是 boolean, 數值, 字元, String 的其他型別, 返回 true
值是 null, 返回 false

themeleaf 遍歷

controller中

 List<Product> ps = new ArrayList<>();
        ps.add(new Product(1,"product a", 50));
        ps.add(new Product(2,"product b", 100));
        ps.add(new Product(3,"product c", 150));   
        m.addAttribute("ps", ps);

html中

 <table>
        <thead>
            <tr>
                <th>id</th>
                <th>產品名稱</th>
                <th>價格</th>
            </tr>
        </thead>
        <tbody>
            <tr th:each="p: ${ps}">
                <td th:text="${p.id}"></td>
                <td th:text="${p.name}"></td>
                <td th:text="${p.price}"></td>
            </tr>
        </tbody>
    </table>

select與thymeleaf遍歷結合

<div class="showing">
    <h2>遍歷 select </h2>
    <select size="3">
        <option th:each="p:${ps}" th:value="${p.id}"     th:selected="${p.id==currentProduct.id}"    th:text="${p.name}" ></option>
    </select>
</div>

image.png

thymeleaf內建工具

#dates工具
now變數是controller中宣告的Date now = new Date();

<div class="showing date">
    <h2>格式化日期</h2>
    直接輸出日期 ${now}:
    <p th:text="${now}"></p>
    預設格式化 ${#dates.format(now)}:
    <p th:text="${#dates.format(now)}"></p>
    自定義格式化 ${#dates.format(now,'yyyy-MM-dd HH:mm:ss')}:
    <p th:text="${#dates.format(now,'yyyy-MM-dd HH:mm:ss')}"></p>
</div>

image.png

其他工具如

Execution Info
Messages
URIs/URLs
Conversions
Dates
Calendars
Numbers
Strings
Objects
Booleans
Arrays
Lists
Sets
Maps
Aggregates
IDs

thymeleaf分頁

與資料庫連線時的分頁
pom加入

<!-- pageHelper -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>4.1.6</version>
        </dependency>

controller中示例

 @RequestMapping("/listCategory")
    public String listCategory(Model m,@RequestParam(value = "start", defaultValue = "0") int start,@RequestParam(value = "size", defaultValue = "5") int size) throws Exception {
        PageHelper.startPage(start,size,"id desc");
        List<Category> cs=categoryMapper.findAll();
        PageInfo<Category> page = new PageInfo<>(cs);
        m.addAttribute("page", page);       
        return "listCategory";
    }

配置PageHelper

package com.how2java.springboot.config; 
import java.util.Properties; 
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;  
import com.github.pagehelper.PageHelper;  
@Configuration
public class PageHelperConfig {
    @Bean
    public PageHelper pageHelper() {
        PageHelper pageHelper = new PageHelper();
        Properties p = new Properties();
        p.setProperty("offsetAsPageNum", "true");
        p.setProperty("rowBoundsWithCount", "true");
        p.setProperty("reasonable", "true");
        pageHelper.setProperties(p);
        return pageHelper;
    }
}

html頁面

 <table align='center' border='1' cellspacing='0'>
        <tr>
            <td>id</td>
            <td>name</td>
            <td>編輯</td>
            <td>刪除</td>
        </tr>
        <tr th:each="c:${page.list}">
            <td th:text="${c.id}"></td>
            <td th:text="${c.name}"></td>
            <td><a th:href="@{/editCategory(id=${c.id})}">編輯</a></td>
            <td><a th:href="@{/deleteCategory(id=${c.id})}">刪除</a></td>
        </tr>
    </table>
    <br/>
    <div>
            <a th:href="@{/listCategory(start=0)}">[首  頁]</a>
            <a th:href="@{/listCategory(start=${page.pageNum-1})}">[上一頁]</a>
            <a th:href="@{/listCategory(start=${page.pageNum+1})}">[下一頁]</a>
            <a th:href="@{/listCategory(start=${page.pages})}">[末  頁]</a>
    </div>

效果

image.png

小禮物走一走,來簡書關注我



作者:cccccttttyyy
連結:https://www.jianshu.com/p/00c7edc2120b
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。