知識庫 / Spring / Spring MVC RSS 訂閱

Spring 和 Thymeleaf 3:表達式

Spring MVC
HongKong
4
02:45 PM · Dec 06 ,2025

1. 簡介

Thymeleaf 是一款用於處理和創建 HTML、XML、JavaScript、CSS 和純文本的 Java 模板引擎。 想要了解 Thymeleaf 和 Spring 的基本知識,請參考這篇文檔。

除了這些基本功能之外,Thymeleaf 還提供了一組實用對象,可以幫助我們在應用程序中執行常見的任務。

在本文中,我們將討論 Thymeleaf 3.0 中的一個核心功能——在 Spring MVC 應用程序中的表達式實用對象。 尤其是,我們將涵蓋日期、日曆、字符串、對象等的處理。

2. Maven 依賴

首先,讓我們看看將 Thymeleaf 與 Spring 集成所需的配置。<em>thymeleaf-spring</em> 庫需要在我們的依賴中:

<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf</artifactId>
    <version>3.0.11.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf-spring5</artifactId>
    <version>3.0.11.RELEASE</version>
</dependency>
<div>
</div>
<div>
<p>請注意,對於 Spring 4 項目,必須使用 <em >thymeleaf-spring4</em> 庫,而不是 <em >thymeleaf-spring5</em> 庫。 最新依賴的版本可以在 <a href="https://mvnrepository.com/artifact/org.thymeleaf/thymeleaf-spring5">這裏</a>找到。 </p>

3. 表達式實用對象

在閲讀本文核心內容之前,如果您想回顧一下如何在您的 Web 應用程序項目中使用 Thymeleaf 3.0 的配置方法,請參考該教程。

為了本文的目的,我們創建了一個 Spring 控制器和一個 HTML 文件,用於測試我們將討論的所有功能。以下是可用的實用對象及其函數列表:

  • #dates:用於 java.util.Date 對象的實用方法
  • #calendars:類似於 #dates,用於 java.util.Calendar 對象
  • #numbers:用於格式化數字對象的實用方法
  • #strings:用於 String 對象的實用方法
  • #objects:用於 Java Object 類的通用實用方法
  • #bools:用於布爾值評估的實用方法
  • #arrays:用於數組的實用方法
  • #lists:用於列表的實用方法
  • #sets:用於集合的實用方法
  • #maps:用於映射的實用方法
  • #aggregates:用於在數組或集合上創建聚合的實用方法
  • #messages:用於在變量表達式中獲取外部化消息的實用方法

3.1. 日期對象

我們想要討論的第一個函數是處理 java.util.Date 對象。負責 日期 處理的表達式工具對象以 #dates.functionName() 開頭。我們想要涵蓋的第一個函數是格式化一個 Date 對象(該對象被添加到 Spring 模型參數中)。

假設我們想要使用 ISO8601 格式:

<p th:text="${#dates.formatISO(date)}"></p>

無論我們的date在後端設置如何,都需要按照該標準進行顯示。 此外,如果想要更具體地指定格式,也可以手動指定:

<p th:text="${#dates.format(date, 'dd-MM-yyyy HH:mm')}"></p>

該函數接受兩個變量作為參數:Date 和其格式。

以下是一些類似的有用函數:

<p th:text="${#dates.dayOfWeekName(date)}"></p>
<p th:text="${#dates.createNow()}"></p>
<p th:text="${#dates.createToday()}"></p>

首先,我們將接收到一週中的日期名稱;其次,我們將創建一個新的 Date 對象;最後,我們將創建一個新的 Date 對象,並將時間設置為 00:00。

3.2. 日曆對象

日曆實用程序與日期處理非常相似,區別在於我們使用的是 java.util.Calendar 對象的實例:

<p th:text="${#calendars.formatISO(calendar)}"></p>
<p th:text="${#calendars.format(calendar, 'dd-MM-yyyy HH:mm')}"></p>
<p th:text="${#calendars.dayOfWeekName(calendar)}"></p>

只有當我們想要創建新的 日曆 實例時,區別在於:

<p th:text="${#calendars.createNow().getTime()}"></p>
<p th:text="${#calendars.createToday().getFirstDayOfWeek()}"></p>

請注意,我們可能會使用任何 Calendar 類的方法來獲取所需的數據。

3.3. 數字處理

另一個非常實用的功能是數字處理。讓我們重點關注一個 num 變量,它以 double 類型隨機創建:

<p th:text="${#numbers.formatDecimal(num,2,3)}"></p>
<p th:text="${#numbers.formatDecimal(num,2,3,'COMMA')}"></p>

在第一行,我們通過設置最小整數位數和精確的小數位數來格式化十進制數字。在第二行,除了整數和小數位數,我們還指定了小數分隔符。選項包括 POINTCOMMAWHITESPACENONEDEFAULT(根據本地設置)。

這裏還有一個函數,我們將在這一段介紹它:生成整數序列。

<p th:each="number: ${#numbers.sequence(0,2)}">
    <span th:text="${number}"></span>
</p>
<p th:each="number: ${#numbers.sequence(0,4,2)}">
    <span th:text="${number}"></span>
</p>

在第一個示例中,我們讓 Thymeleaf 生成一個從 0-2 的序列,而在第二個示例中,除了提供最小值和最大值,我們還定義了步長(在本示例中,值將以 2 為增量)。

請注意,該區間兩端都閉合。

3.4 字符串操作

這是表達式實用對象中最全面的功能。

我們可以從檢查空或 null String 對象的功能開始。開發人員經常在 Thymeleaf 標籤中使用 Java 方法進行此操作,這對於 null 對象來説可能不安全。

相反,我們可以這樣做:

<p th:text="${#strings.isEmpty(string)}"></p>
<p th:text="${#strings.isEmpty(nullString)}"></p>
<p th:text="${#strings.defaultString(emptyString,'Empty String')}"></p>

第一個 String 不為空,因此方法將返回 false。第二個 Stringnull,所以我們會得到 true。 最終,我們可以使用 #strings.defaultString(…) 方法來指定一個默認值,如果 String 為空時。

還有許多其他方法。 它們不僅適用於字符串,還適用於 Java.Collections。 例如,要使用與子字符串相關的操作:

<p th:text="${#strings.indexOf(name,frag)}"></p>
<p th:text="${#strings.substring(name,3,5)}"></p>
<p th:text="${#strings.substringAfter(name,prefix)}"></p>
<p th:text="${#strings.substringBefore(name,suffix)}"></p>
<p th:text="${#strings.replace(name,'las','ler')}"></p>

或者使用 null-安全比較和連接:

<p th:text="${#strings.equals(first, second)}"></p>
<p th:text="${#strings.equalsIgnoreCase(first, second)}"></p>
<p th:text="${#strings.concat(values...)}"></p>
<p th:text="${#strings.concatReplaceNulls(nullValue, values...)}"></p>

最後,還有與文本樣式相關的特性,它們將保持語法始終一致:

<p th:text="${#strings.abbreviate(string,5)} "></p>
<p th:text="${#strings.capitalizeWords(string)}"></p>

在第一種方法中,縮短的文本將使其最大長度達到 n。如果文本過長,則會被截斷並以“...”結尾。

在第二種方法中,我們將對單詞進行大寫。

3.5. 聚合值

我們要討論的最後但並非不重要的功能是聚合值。它們是空安全的,並提供用於從數組或其他集合中計算平均值或總和的實用工具:

<p th:text="${#aggregates.sum(array)}"></p>
<p th:text="${#aggregates.avg(array)}"></p>
<p th:text="${#aggregates.sum(set)}"></p>
<p th:text="${#aggregates.avg(set)}"></p>

4. 結論

在本文中,我們討論了在 Thymeleaf 框架版本 3.0 中實現的 Expression Utility Objects 的特性。

如何測試? 我們的建議是首先在瀏覽器中進行試驗,然後檢查現有的 JUnit 測試。

請注意,示例並不涵蓋所有可用的 Utility 表達式。如果您想了解所有類型的 Utility,請查看 這裏

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

發佈 評論

Some HTML is okay.