知識庫 / Spring / Spring MVC RSS 訂閱

Thymeleaf 表達式類型

Spring MVC
HongKong
8
11:51 AM · Dec 06 ,2025

1. 概述

Thymeleaf 是在 Java 生態系統中流行的模板引擎。它幫助將控制器層的數據綁定到視圖層。 Thymeleaf 屬性使用表達式設置。 在本教程中,我們將通過示例討論表達式類型。

2. 示例設置

我們將使用簡單的 Web 應用程序 Dino 作為示例。它是一個簡單的 Web 應用程序,用於創建恐龍檔案。

首先,讓我們為我們的恐龍創建一個模型類:

public class Dino {
    private int id;
    private String name;
    // constructors   
    // getter and setter
}

接下來,讓我們創建一個控制器類:

@Controller
public class DinoController {

    @RequestMapping("/")
    public String dinoList(Model model) {
        Dino dinos = new Dino(1, "alpha", "red", 50);
        model.addAttribute("dinos", dinos);
        return "index";
    }
}

通過我們的示例配置,我們可以將 Dino 實例注入到我們的模板文件中。

3. 變量表達式

變量表達式有助於將控制器中的數據注入到模板文件中。它將模型屬性暴露給視圖。

變量表達式語法結合了美元符號和花括號。我們的變量名稱位於花括號內:

${...}

讓我們將 Dino 數據注入到模板文件中:

<span th:text="${dinos.id}"></span> 
<span th:text="${dinos.name}"></span>

條件語句和迭代也能夠使用變量表達式。

<!-- for iterating -->
<div th:each="dinos : ${dinos}">

<!-- in conditionals -->
<div th:if="${dinos.id == 2}">

4. 選擇表達式

選擇表達式作用於一個已選對象上。它幫助我們選擇已選對象的子對象。

選擇表達式的語法是星號和花括號的組合。我們的子對象位於花括號內:

*{...}

讓我們選擇我們的 Dino 實例的 idname,並將其注入到我們的模板文件中:

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

此外,選擇表達式主要用於 HTML 表單中

與變量表達式不同,無需分別處理每個輸入元素

以 Dino Web 應用為例,讓我們創建一個新的 Dino 實例並將其綁定到我們的模型屬性:

<form action="#" th:action="@{/dino}" th:object="${dinos}" method="post">
    <p>Id: <input type="text" th:field="*{id}" /></p>
    <p>Name: <input type="text" th:field="*{name}" /></p>
</form>

5. 消息表達式

此表達式有助於將外部化文本引入我們的模板文件。它也被稱為文本外部化。

外部文本所在的來源可以是 .properties 文件。 此表達式在包含佔位符時是動態的

消息表達式的語法是花括號和哈希值的組合。我們的鍵位於花括號內:

#{...}

例如,假設我們想要在 Dino 網頁應用程序的各個頁面上顯示一條特定的消息。我們可以將消息放入一個 messages.properties文件中:

welcome.message=welcome to Dino world. 

要將歡迎消息綁定到我們的視圖模板中,我們可以通過其鍵來引用它:

<h2 th:text="#{welcome.message}"></h2>

我們可以通過在外部文件中添加佔位符來接受消息表達式參數:

dino.color=red is my favourite, mine is {0}

在我們的模板文件中,我們將引用消息併為佔位符添加一個值:

<h2 th:text="#{dino.color('blue')}"></h2>

此外,我們還可以通過將變量表達式作為佔位符的值進行注入,使佔位符具有動態性:

<h2 th:text="#{dino.color(${dino.color})}"></h2>
<div>
  <div>
    <span>這個表達式也被稱為國際化。它可以幫助我們適應我們的Web應用程序,以適應不同的語言。</span>
    </div
  </div

6. 鏈接表達式

鏈接表達式在 URL 構建中至關重要。該表達式綁定到指定的 URL。
鏈接表達式語法結合了“at”符號和花括號。我們的鏈接位於花括號內:
@{...}

URL 可以是絕對的或相對的。當使用帶有絕對 URL 的鏈接表達式時,它會綁定到以“http(s)”開頭的完整 URL:

<a th:href="@{http://www.baeldung.com}"> Baeldung Home</a>

相對鏈接,另一方面,與我們的 Web 服務器的上下文綁定。我們可以輕鬆地通過控制器中定義的模板文件進行導航。

@RequestMapping("/create")
public String dinoCreate(Model model) {
    model.addAttribute("dinos", new Dino());
    return "form";
}

我們可以根據 @RequestMapping 中指定的方式請求該頁面。

<a th:href="@{/create}">Submit Another Dino</a>

可以通過路徑變量傳遞參數

假設我們想要提供一個編輯現有實體的鏈接。我們可以通過其 id 調用我們想要編輯的對象。鏈接表達式可以接受 id 作為參數:

<a th:href="/@{'/edit/' + ${dino.id}}">Edit</a>

鏈接表達式可以設置協議相對 URL。 協議相對與絕對 URL 類似。 URL 將使用 HTTP 或 HTTPS 協議方案,具體取決於服務器的協議:

<a th:href="@{//baeldung.com}">Baeldung</a>

7. 片段表達式

片段表達式可以幫助我們移動模板文件之間的標記。該表達式使我們能夠生成一個可移動的標記片段。

片段表達式的語法是波浪號和花括號的組合。我們的片段位於花括號內:

~{...}

對於我們的 Dino Web 應用程序,讓我們在我們的 index.html 文件中創建一個頁腳,並使用 fragment 屬性:

<div th:fragment="footer">
    <p>Copyright 2022</p>
</div>

現在,我們可以將 頁腳 注入到其他模板文件中:

<div th:replace="~{index :: footer}"></div>

8. 結論

在本文中,我們探討了各種 Thymeleaf 簡單表達式及其示例。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.