深色模式
无需片段参数的片段局部变量
即便片段定义时没有声明参数(即 th:fragment 后无参数列表):
html
<!-- 无参数签名的片段 -->
<div th:fragment="frag">
...
</div>我们依然可以给片段传递局部变量——但只能使用「按名称传参」这一种语法。
html
<!-- 仅支持按名称传参,给无参数片段传局部变量 -->
<div th:replace="~{::frag (onevar=${value1},twovar=${value2})}"></div>上述写法完全等价于「先通过 th:with 定义局部变量,再引入片段」,本质是给片段执行上下文添加临时变量:
html
<!-- 等价写法:th:with 定义局部变量,th:replace 引入片段 -->
<div th:replace="~{::frag}" th:with="onevar=${value1},twovar=${value2}"></div>需要注意的是,为片段指定这些局部变量 —— 无论该片段是否定义了参数签名 —— 都不会导致片段执行前清空上下文环境。片段仍能像当前这样,访问调用模板中正在使用的所有上下文变量。
实用示例(动态文本片段)
html
<!-- 无参数的通用文本片段 -->
<div th:fragment="text-box">
<div class="box" th:text="${boxTitle}">默认标题</div>
<p th:text="${boxContent}">默认内容</p>
</div>
<!-- 调用时传递局部变量,无需修改片段定义 -->
<div th:replace="::text-box (boxTitle='产品介绍', boxContent=${prod.desc})"></div>总结
- 无参数签名的片段也能通过「按名称传参」传递局部变量,等价于
th:replace + th:with; - 片段局部变量不会清空原有上下文,可同时访问全局变量和局部变量;
- 该特性让片段无需提前声明参数,也能动态适配不同的传参需求,提升复用灵活性。
