1. 程式人生 > >SpringBoot系列(六)整合thymeleaf詳解版

SpringBoot系列(六)整合thymeleaf詳解版

SpringBoot系列(六)整合thymeleaf詳解版

1. thymeleaf簡介

 1. Thymeleaf是適用於Web和獨立環境的現代伺服器端Java模板引擎。

 2. Thymeleaf的主要目標是為您的開發工作流程帶來優雅的自然模板 -HTML可以在瀏覽器中正確顯示,也可以作為靜態原型工作,從而可以在開發團隊中加強協作。

 3. Thymeleaf擁有適用於Spring Framework的模組,與您喜歡的工具的大量整合以及插入您自己的功能的能力,對於現代HTML5 JVM Web開發而言,Thymeleaf是理想的選擇-儘管它還有很多工作要做。

2. thymeleaf特點

 1. thymeleaf在有網路無網路的環境下都可以執行,所以可以直接在瀏覽器開啟檢視靜態頁面效果。它支援HTML原型,可以在HTML標籤裡面新增其他屬性來實現資料渲染。

 2. thymeleaf具有開箱即用的特性,Thymeleaf是Spring boot推薦使用的模版引擎,直接以html顯示,前後端可以很好的分離。

3. thymeleaf在SpringBoot的應用

 1. 國際化,渲染不同國家的語言

 2. 共同頁面顯示,比如統一異常頁面處理,共同的頁面處理

4. SpringBoot引入Thymeleaf

 新建一個Springboot web專案,然後新增以下依賴。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

 然後在配置檔案裡面新增如下依賴。

spring:
  thymeleaf:
    cache: false 
    prefix: classpath:/templates/
    encoding: UTF-8 #編碼
    suffix: .html #模板字尾
    mode: HTML #模板

配置說明:

 cache這一行是將頁面的快取關閉,不然我們改變頁面之後可能不能及時看到更改的內容,預設是true。

 prefix是配置thymeleaf模板所在的位置。

 encoding 是配置thymeleaf文件的編碼,後面的就不說了

5. controller配置

 上面我們配置好了環境之後就可以建立一個controller資料夾,然後寫一個controller,來測試我們的thymeleaf是否成功引入。順便建立一個物件。
程式碼:

@Controller
public class ThymeleafController {

    @GetMapping("/getStudents")
    public ModelAndView getStudent(){
        List<Student> students = new LinkedList<>();
        Student student = new Student();
        student.setId(1);
        student.setName("全棧學習筆記");
        student.setAge(21);
        Student student1 = new Student();
        student1.setId(2);
        student1.setName("張三");
        student1.setAge(22);
        students.add(student);
        students.add(student1);
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("students",students);
        modelAndView.setViewName("students");
        return modelAndView;
    }
}

 程式碼解釋 :我們建立一個list,然後在list裡面新增資料,一遍一次將資料傳到頁面使用。然後我們建立一個ModelAndView的物件,將list放入這個modeAndView物件中,第一個引數是需要放到model中的屬性名稱相當於是一個鍵,第二個是值,是一個物件。然後利用setViewName方法,設定要跳轉的頁面或者說是將資料傳到對應的頁面。

 最外層我們使用了一個 @Controller,這個註解是用來返回一個頁面或者檢視層的。

 當然,返回ModelAndView物件只是一種方法,還有其他的方法,比如說下面這樣

@RequestMapping("/getString")
public String getString(HttpServletRequest request){
    String name = "全棧學習筆記";
    request.setAttribute("name",name);
    return "index.html";
}

利用http的request傳值。
然後還有這樣

@RequestMapping("/getModel")
public String getModel(Model model){
    model.addAttribute("key","這是一個鍵");
    return "index.html";
}

 去掉末尾的.html也可以,因為我們在配置檔案裡面設定了檔案的格式為HTML檔案。return的字串都是對應的HTML檔案的名稱。

 實體類程式碼如下:

/**
 * (Student)實體類
 *
 * @author 全棧學習筆記
 * @since 2020-04-14 11:39:10
 */
public class Student  {
    private static final long serialVersionUID = -91969758749726312L;
    /**
    * 唯一標識id
    */
    private Integer id;
    /**
    * 姓名
    */
    private String name;
    /**
    * 年齡
    */
    private Integer age;
    //省略get,set方法,自己加上
}

6. 頁面編寫

 寫好程式碼就等頁面了,在templates資料夾下面建立一個students.html檔案,編寫如下程式碼

<!DOCTYPE html>
<html lang="en" xmlns:th="https://www.thymeleaf.org/">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<table border="1">
    <tr>
        <td>ID</td>
        <td>姓名</td>
        <td>年齡</td>
    </tr>
    <tr th:each="student:${students}">
        <td th:text="${student.id}"></td>
        <td th:text="${student.name}"></td>
        <td th:text="${student.age}"></td>
    </tr>
</table>
</body>
</html>

 這裡有一個很重要的事情就是,我們使用thymeleaf模板之前必須先引入thymeleaf,如下。

<html lang="en" xmlns:th="https://www.thymeleaf.org/">

 這個很關鍵,不然你就用不了這個thymeleaf語法規則。

 程式碼說明:你可以看到th:each 這個語法,是用來遍歷的,類似於for迴圈,然後我們通過th:text 這個語法來渲染文字。然後還有一些其他的語法,比如說遍歷物件

<div th:object="${student}">
    <p th:text="id"></p>
    <p th:text="name"></p>
    <p th:text="age"></p>
</div>

 其他多餘的語法規則這裡就不一一講解了。
常用的語法:

<!-- 邏輯判斷 -->
th:if
th:else
<!-- 分支控制 -->
th:switch
th:case

<!--迴圈 -->
th:each
<!-- 運算 -->
<p th:text="${age}%2 == 0"></p>
<!-- 賦制value -->
th:value
<!-- 連結 -->
th:href

本期講解就到這裡,如果你覺得本文對你有用,可以點個贊,點個關注哦!下一期更精彩!wx search 全棧學習筆記!點個關注不迷路