开发学院

您的位置:首页>教程>正文

教程正文

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>