如何从 Spring Boot 中找到 Thymeleaf 模板

Posted

技术标签:

【中文标题】如何从 Spring Boot 中找到 Thymeleaf 模板【英文标题】:How to locate Thymeleaf template from spring boot 【发布时间】:2017-05-10 03:17:13 【问题描述】:

我正在尝试按照http://www.thymeleaf.org/doc/articles/springmvcaccessdata.html 的本教程学习如何将响应发送到 Thymeleaf 模板。但我收到此错误:找不到模板位置:类路径:/模板/(请添加一些模板或检查您的 Thymeleaf 配置)

我将 message.html 文件放在 Other Sources 目录和 <default package> 下的 src/main/resources 中。

所以结构看起来像:

一些项目 -其他来源 --src/main/资源 ---<default package> ----message.html

我想知道为什么它显示在 <default package> 下而不是 <template> 下?会不会是问题?如果是这样我应该如何改变它?我正在使用 netbeans 和 Maven。请问有什么想法吗?这些是我在 pom.xml 中的依赖项:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
     <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>            
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
    </dependency>

在控制器中我有

@RequestMapping(value = "message", method = RequestMethod.GET)
    public String messages(Model model) 
    model.addAttribute("messages", messageRepository.findAll());
    return "message";

在视图中:

<ul th:each="message : $messages">
    <li th:text="$message.id">1</li>
    <li><a href="#" th:text="$message.title">Title ...</a></li>
    <li th:text="$message.text">Text ...</li>
</ul>   

【问题讨论】:

【参考方案1】:

Spring Boot 包括对 thymeleaf 模板引擎的自动配置支持,您的模板将自动从 src/main/resources/templates 中获取。

如果您要自定义模板位置,请使用以下 Spring Boot 中可用的 thymeleaf 属性配置。

 spring.thymeleaf.check-template=true # Check that the template exists before rendering it.

 spring.thymeleaf.check-template-location=true # Check that the templates location exists.

 spring.thymeleaf.enabled=true # Enable MVC Thymeleaf view resolution.

 spring.thymeleaf.prefix=classpath:/templates/ # Prefix that gets prepended to view names when building a URL.

 spring.thymeleaf.suffix=.html # Suffix that gets appended to view names when building a URL.

【讨论】:

我应该从哪里找到这个配置文件?我正在使用 maven,当我尝试从依赖项列表中更改一些内容时,它不允许我在那里更改任何内容。有些代码甚至被隐藏了。我是否应该手动下载要更改配置的依赖项? 在您的类路径中添加一个 application.properties 文件并放置所有属性。 src/main/resources/application.properties【参考方案2】:

thymeleaf 模板的默认目录位置是:

src/main/resources/templates

其他路径是 Spring Boot 的标准约定。

【讨论】:

【参考方案3】:

这里有两件事: 1. 如果您使用的是 Maven,并且我假设没有自定义文件夹名称。那么文件夹名称应该是 src 而不是 source。 2. 重命名文件夹后,将您的模板移动到 src/resources 内的“模板”文件夹中,这应该可以正常运行。

【讨论】:

@Hmanshu Bhardwaj 我在问题中打错了字。在 netbeans 中,文件夹结构显示如下 src/main/resources,它位于 netbeans 项目层次结构中的其他资源目录下。我将修复问题中的错字。谢谢你的帮助。现在也许你可以提供一些进一步的反馈? 我已经给了2分。您的模板是否在 src/main/resources 下的模板目录中? @Himanshu 我在 src/main/resources 下创建了模板目录并将 html 文件放在那里,现在问题解决了。感谢您的支持。我会将问题标记为已回答。 对我来说唯一的错误是文件夹的名称。只需确保正确编写 templates【参考方案4】:

对于放在文件夹 src/main/resources/templates/ 中的 Thymeleaf 模板文件,您也可以查看 http://www.mkyong.com/spring-boot/spring-boot-hello-world-example-thymeleaf/ 。希望您会发现使用弹簧靴启动 thymeleaf 很容易。

【讨论】:

【参考方案5】:

我在使用 Spring boot + Gradle 时遇到了同样的问题,这些是我解决它所遵循的步骤:

    打印出类路径

    一旦我确定资源文件夹没有包含在类路径中,我就从磁盘重新加载了应用程序:

    Gradle 清理项目

【讨论】:

以上是关于如何从 Spring Boot 中找到 Thymeleaf 模板的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Spring Boot 中找到 Thymeleaf 模板

Spring Boot:禁用安全自动配置

开源框架thyme-boot使用

Spring Boot Mobile不使用移动模板

Thymeleaf 模板 在spring boot 中的引用和应用

Spring Boot:无法从以下候选中找到单个主类