You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Thymeleaf动态注入内容报错:无法解析${content}片段

Thymeleaf布局扩展与动态内容注入问题解决

错误原因

你遇到的TemplateInputException是因为admin.html中的th:replace="${content}"里的${content}变量未被正确赋值,Thymeleaf无法找到对应的模板或片段。同时当前的模板引用逻辑倒置,子模板与布局模板的交互方式有误。


解决方案一:子模板直接扩展布局(推荐)

这种方式无需额外依赖,使用Thymeleaf原生片段机制实现布局复用:

1. 修正admin.html的布局结构

将admin.html中的内容占位区域改为空的可替换片段,移除动态变量引用:

<!-- Main Content -->
<div class="col-md-9 col-lg-10">
    <!-- 定义可被子模板替换的内容片段 -->
    <div th:fragment="content"></div>
</div>

2. 修正main.html的模板引用逻辑

让main.html作为子模板,直接扩展admin.html布局并注入内容:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<!-- 替换admin布局中的body部分,同时注入自定义内容 -->
<body th:replace="layouts/admin :: ~{::body}">
    <!-- 此片段会替换admin中的content占位 -->
    <div th:fragment="content">
        <div class="container">
            <h1>Welcome to the Main Page</h1>
            <p>This is the Main Page content area. You can place your website's content here.</p>
        </div>
    </div>
</body>
</html>

3. 保持控制器逻辑不变

控制器返回admin/main/main即可,Thymeleaf会自动加载子模板并合并布局。


解决方案二:控制器动态传递内容片段(适合多场景动态切换)

如果你需要通过控制器动态指定要加载的内容片段,可按以下步骤修改:

1. 调整admin.html的内容区域

保留动态变量引用,无需定义额外片段:

<!-- Main Content -->
<div class="col-md-9 col-lg-10">
    <div th:replace="${content}"></div>
</div>

2. 修改控制器代码,传入content变量

在控制器中指定要加载的片段路径,返回布局模板layouts/admin:

@Controller
public class HomeController {

    @GetMapping("")
    public String getMethodName(Model model) {
        // 指定要注入的片段:模板路径 + 片段名称
        model.addAttribute("content", "admin/main/main :: homecontent");
        return "layouts/admin";
    }

    @GetMapping("home")
    public String home(Model model) {
        model.addAttribute("content", "admin/home/home :: homecontent");
        return "layouts/admin";
    }
}

3. 确保main.html中的片段名称正确

main.html中保留homecontent片段:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<body>
    <div th:fragment="homecontent">
        <div class="container">
            <h1>Welcome to the Main Page</h1>
            <p>This is the Main Page content area. You can place your website's content here.</p>
        </div>
    </div>
</body>
</html>

内容的提问来源于stack exchange,提问作者Shaik Ansar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 08:53:10