知識庫 / Spring / Spring Boot RSS 訂閱

在 Spring Boot 中更改 Thymeleaf 模板目錄

Spring Boot,Spring MVC
HongKong
8
01:20 PM · Dec 06 ,2025

1. 簡介

Thymeleaf 是一個我們可以用於我們 Spring Boot 應用程序的模板引擎。 就像許多事物一樣,Spring Boot 提供了一個默認位置,它期望找到我們的模板

在本簡短教程中,我們將瞭解如何更改模板位置。 完成後,我們將學習如何設置多個位置。

2. 安裝配置

要使用 Thymeleaf,我們需要將合適的 Spring Boot Starter 添加到我們的 pom.xml 中:

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

3. 修改默認位置

默認情況下,Spring Boot 會在 src/main/resources/templates 目錄下查找我們的模板。我們可以將模板放在那裏,並使用子目錄進行組織,而不會遇到任何問題。

現在,假設我們有這樣一個要求:所有模板都位於名為 templates-2 的目錄中。

讓我們創建一個用於説“Hello”的模板,並將其放在 src/main/resources/templates-2 中:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Enums in Thymeleaf</title>
</head>
<body>
    <h2>Hello from 'templates/templates-2'</h2>
</body>
</html>

我們還需要一個控制器:

@GetMapping("/hello")
public String sayHello() {
    return "hello";
}

有了基本的配置就緒,我們現在來配置 Spring Boot 使用我們的 templates-2 目錄,通過在 application.properties 中覆蓋一個屬性來實現:

spring.thymeleaf.prefix=classpath:/templates-2/

現在,當我們調用我們的 HelloController 時,我們會看到來自 hello.html 的問候語。

4. 使用多個位置(Locations)

現在我們已經學習瞭如何更改默認位置,接下來讓我們看看如何使用多個模板位置。

要做到這一點,讓我們創建一個 ClassLoaderTemplateResolver Bean:

@Bean
public ClassLoaderTemplateResolver secondaryTemplateResolver() {
    ClassLoaderTemplateResolver secondaryTemplateResolver = new ClassLoaderTemplateResolver();
    secondaryTemplateResolver.setPrefix("templates-2/");
    secondaryTemplateResolver.setSuffix(".html");
    secondaryTemplateResolver.setTemplateMode(TemplateMode.HTML);
    secondaryTemplateResolver.setCharacterEncoding("UTF-8");
    secondaryTemplateResolver.setOrder(1);
    secondaryTemplateResolver.setCheckExistence(true);
        
    return secondaryTemplateResolver;
}

在我們的自定義 Bean 中,我們設置了前綴為我們使用的次級模板目錄:templates-2。我們還將 CheckExistance 標誌設置為 true。這是允許解析器以鏈式方式運行的關鍵。

配置完成後,我們的應用程序可以使用來自默認 main/resources/templates 目錄和 main/resources/templates-2 目錄的模板。

5. 錯誤

當使用 Thymeleaf 工作時,我們可能會看到以下錯誤:

Error resolving template [hello], template might not exist or might not be accessible
  by any of the configured Template Resolvers

我們看到此消息時,表示 Thymeleaf 無法找到某個模板的原因。下面我們來探討可能的原因以及如何解決它們。

5.1. 控制器中的拼寫錯誤

我們經常會遇到這種錯誤,通常是由於簡單的拼寫錯誤造成的。首先要檢查的是,我們的文件名(不含擴展名)與控制器中請求的模板是否完全匹配。如果使用了子目錄,也必須確保這些子目錄的名稱正確。

此外,該問題也可能與某些操作系統有關。Windows 不區分大小寫,但其他操作系統則區分大小寫。如果一切正常工作,例如在我們的本地 Windows 機器上,但部署後卻出現問題,則應考慮這一點。

5.2. 在控制器中包含文件擴展名

由於我們的文件通常具有擴展名,因此在返回控制器中的模板路徑時,自然地包含它們也是合理的。Thymeleaf 會自動添加後綴,因此我們應避免提供它。

5.3. 不使用默認位置

如果我們將模板放置在除了 src/main/resources/templates 之外的其他位置,我們也會遇到此錯誤。 如果我們希望使用不同的位置,則需要設置 spring.thymeleaf.prefix 屬性,或者創建自定義的 ClassLoaderTemplateResolver Bean 來處理多個位置。

6. 結論

在本快速教程中,我們學習了 Thymeleaf 模板位置的相關知識。首先,我們瞭解瞭如何通過設置屬性來更改默認位置。然後,我們進一步構建,創建了自定義的 ClassLoaderTemplateResolver 以支持多個位置。

最後,我們討論了當 Thymeleaf 無法找到模板時會遇到的錯誤以及如何解決它。

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

發佈 評論

Some HTML is okay.