Thymeleaf + Spring Boot:将html放在子文件夹中

sva*_*605 3 html thymeleaf spring-boot

默认情况下,Thymeleaf需要将所有html文件都存在于scr / main / java / resources / templates中。为了避免在template文件夹中造成混乱,我需要在此处创建不同的子滑块。问题在于放置在那里的html文件永远都不会得到解决。示例如下。

结构体:

项目结构

IndexController:

@Controller
public class IndexController {
    @GetMapping(value = "/")
    public String index() {
        return "index";
    }
}
Run Code Online (Sandbox Code Playgroud)

默认模板:

<!DOCTYPE html>
<html lang="en"
      xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
<head>
    <meta charset="UTF-8"/>
    <title>Default template</title>
</head>
<body>

<section id="site-content" layout:fragment="content"></section>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

指数:

<!DOCTYPE html>
<html lang="en"
      xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
      layout:decorator="default">
<head>
    <meta charset="UTF-8"/>
    <title>Index</title>
</head>
<body>

<div layout:fragment="content">
    <div>
        This is index page
    </div>

    <a href="subfolder/page.html">Page</a>
</div>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

子文件夹中的页面:

<!DOCTYPE html>
<html lang="en"
      xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
      layout:decorator="default">
<head>
    <meta charset="UTF-8">
    <title>Page</title>
</head>
<body>

<div layout:fragment="content">
    This is a page in the subfolder
</div>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

当我打开索引页面并单击指向page.html的链接时,得到以下信息:

错误

我做错了什么?

N4z*_*oth 5

您没有/subfolder/page.html的控制器映射,这不是Thymeleaf和Spring的工作方式。

您不能轻易地引用纯HTML文件,因为它们在技术上没有存储在其中。您必须引用在Spring中定义的端点,然后将选择要呈现的HTML文件,如下所示:

@Controller
public class IndexController {
    @GetMapping(value = "/subfolder/page")
    public String index() {
        return "subfolder/page";
    }
}
Run Code Online (Sandbox Code Playgroud)

并按以下方式创建您的链接:

<a href="subfolder/page">Page</a>
Run Code Online (Sandbox Code Playgroud)