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 實例的 id 和 name,並將其注入到我們的模板文件中:
<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 的鏈接表達式時,它會綁定到以“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 簡單表達式及其示例。