局部变量
定义局部变量并使用
Thymeleaf 将局部变量称为模板的特定片段定义的变量,并且仅可用于该片段内。
比如在th:each标签中,定义了一个prod变量,该prod变量仅在标签范围内可用,在标签内,可以使用该变量。
<tr th:each="prod : ${prods}">
...
</tr>
Thymeleaf还提供了一种无需迭代即可使用th:with属性声明局部变量的方法,其语法类似于属性值赋值:
<div th:with="firstPer=${persons[0]}">
<p>
The name of the first person is <span th:text="${firstPer.name}">Julius Caesar</span>.
</p>
</div>
当th:with被处理时,该firstPer变量被创建为局部变量并添加到来自上下文的变量映射中,以便它可以与在上下文中声明的任何其他变量一起使用,但只能在包含< div>标签的范围内。
还可以使用多重赋值语法同时定义多个变量:
<div th:with="firstPer=${persons[0]},secondPer=${persons[1]}">
<p>
The name of the first person is <span th:text="${firstPer.name}">Julius Caesar</span>.
</p>
<p>
But the name of the second person is
<span th:text="${secondPer.name}">Marcus Antonius</span>.
</p>
</div>
th:with属性允许重用在同一属性中定义的变量,以下代码表示,定义一个局部变量,第二个局部变量可以直接使用第一个局部变量定义的值
<div th:with="company=${user.company + ' Co.'},account=${accounts[company]}">...</div>
读取属性文件中的局部变量
可以使用消息表达式获取属性文件中的值并赋值给局部变量。
<p>
Today is:
<span th:with="df=#{date.format}"
th:text="${#calendars.format(today,df)}">13 February 2011</span>
</p>
属性优先级
当您th:*在同一个标签中编写多个属性时会发生什么?例如:
<ul>
<li th:each="item : ${items}" th:text="${item.description}">Item description here...</li>
</ul>
我们希望该th:each属性在之前执行,th:text以便我们得到我们想要的结果,但鉴于 HTML/XML 标准没有赋予标记中属性的写入顺序任何种类的意义,因此优先级必须在属性本身中建立机制,以确保这将按预期工作。
因此,所有 Thymeleaf 属性都定义了一个数字优先级,它确定了它们在标签中的执行顺序,数字越小,优先级越高。
这个优先机制意味着与属性位置并无关系,只与属性名有关。
注释
标准 HTML/XML 注释
标准 HTML/XML 注释<!- - … - ->可以在 Thymeleaf 模板中的任何地方使用。Thymeleaf 不会处理这些评论中的任何内容,并将逐字复制到结果中,在浏览器中是能看到这些注释的。不推荐使用这种方式。
Thymeleaf 解析器级注释
解析器级别的注释块是在 Thymeleaf 解析模板时将简单地从模板中删除的代码。
<!--/* This code will be removed at Thymeleaf parsing time! */-->
Thymeleaf 将删除<!- -/注释/- ->,因此这些注释块也可用于在模板静态打开时显示代码,直到它会在 Thymeleaf 处理时被删除,浏览器 F12 无法看到被注释的内容,但是如果不通过 Thyneleaf 渲染,而是以原型访问时,浏览器 F12 可以看到被注释的内容。
添加html及Thymeleaf 解析器级注释
<!--/* 循环用户 */-->
<!--循环用户-->
显示效果,解析器级注释已被处理:
Thymeleaf原型注释
原型注释格式:
<!--/*/
....
/*/-->
Html 注释的基础上加上了 /*/,它的作用是当模板被静态打开(即作为原型)时,这些被注释的内容将会被注释掉,而通过 Thymeleaf 渲染时, 会被自动删除,其中的内容都将进行正常显示。这与上面解析器级注释方式刚好相反,解析器级注释方式是作为原型打开时可以显示,而 Thymeleaf 渲染时会被删除。
th:block标签
< th:block ></ th:block>是Thymeleaf提供的唯一的一个Thymeleaf块级元素,其特殊性在于Thymeleaf模板引擎在处理< th:block>的时候会删掉它本身,标签本身不显示,而保留其内容。
<th:block th:if="1 == 1">
<div id="div1">
div1
</div>
<div id="div2">
div2
</div>
</th:block>