Thymeleaf 3.0教程:8 模板布局(二)
8.2可参数化片段签名
为了为模板片段创建一个更像函数的机制,用th:fragment定义的片段可以指定一组参数:
<div th:fragment="frag (onevar,twovar)"> <p th:text="${onevar} + ' - ' + ${twovar}">...</p> </div>
这需要使用这两种语法之一从th:insert或th:replace调用片段:
<div th:replace="::frag (${value1},${value2})">...</div> <div th:replace="::frag (onevar=${value1},twovar=${value2})">...</div>
请注意,顺序在最后一个选项中并不重要:
<div th:replace="::frag (twovar=${value2},onevar=${value1})">...</div>
不带片段参数的片段局部变量
即使片段的定义没有像这样的参数:
<div th:fragment="frag"> ... </div>
我们可以使用上面指定的第二种语法来调用它们(并且只有第二种语法):
<div th:replace="::frag (onevar=${value1},twovar=${value2})">
这相当于将th:replace和th:with组合:
<div th:replace="::frag" th:with="onevar=${value1},twovar=${value2}">
请注意,无论片段是否有参数签名,这种局部变量的规范都不会导致上下文在执行之前被清空。片段仍然能够像当前一样访问调用模板中使用的每个上下文变量。
th:assert 对于in-template声明
th:assert属性可以指定一个逗号分隔的表达式列表,这些表达式应该被求值并为每次求值生成true,否则会引发异常。
<div th:assert="${onevar},(${twovar} != 43)">...</div>
这对于验证片段签名处的参数非常有用:
<header th:fragment="contentheader(title)" th:assert="${!#strings.isEmpty(title)}">...</header>