th:ref 只是一个标记属性。从处理的角度来看,它什么都不做,只是在处理模板时它会消失,但它的有用性在于它充当标记引用,即它可以通过标记选择器的名称解析,就像标记名或片段(th:fragment)一样。
因此,如果我们有一个选择器,比如:
<attr sel="whatever" .../>
这将匹配:
(1)任何 <whatever> 标记
(2)任何带有 th:fragment="whatever" 属性的标签
(3)任何带有 th:ref="whatever" 属性的标签
th:ref 与使用纯 HTML 的 id 属性相比,有什么优势呢?仅仅是因为我们可能不想在我们的标签上添加那么多的 id 和 class 属性,作为逻辑锚,这可能最终会污染我们的输出。
在同样的意义上,th:ref 的缺点是什么?嗯,很明显,我们会在我们的模板中加入一点 Thymeleaf 的逻辑("logic")。
注意,th:ref 属性的这种适用性不仅适用于解耦逻辑模板文件,它在其他类型的场景中也同样适用,例如在片段表达式(~{…})中。