Thymeleaf 3.0教程:12 内嵌(一)
12.1 表达式内嵌
虽然标准方言允许我们使用标签属性做几乎所有的事情,但是在有些情况下,我们更喜欢将表达式直接写入我们的HTML文本。例如,我们可能更喜欢写这个:
<p>Hello, [[${session.user.name}]]!</p>
与其这样:
<p>Hello, <span th:text="${session.user.name}">Sebastian</span>!</p>
[[...]]或[(...)]之间的表达式被认为是百里香叶中的内联表达式,在它们内部,我们可以使用在th:text或th:utext属性中也有效的任何类型的表达式。
注意,[[...]]对应th:text (即结果将是HTML转移),[(...)]对应th:utext,不会执行任何HTML转义。所以用一个变量,比如msg = 'This is <b>great!</b>'给出这个片段:
<p>The message is "[(${msg})]"</p>
结果将不会显示这些<b>标签,因此:
<p>The message is "This is <b>great!</b>"</p>
而如果像这样转义:
<p>The message is "[[${msg}]]"</p>
结果将是HTML转义的:
<p>The message is "This is <b>great!</b>"</p>
请注意,默认情况下,文本内联在我们标记中的每个标记的主体中是活动的,而不是标记本身,因此我们不需要做任何事情来启用它。
内联与自然模板
如果你来自其他模板引擎,而这种输出文本的方式是常见的,你可能会问:为什么我们不从一开始就这样做?它的代码比所有这些 th:text属性都少!
尽管你可能会觉得内联很有趣,但是你应该永远记住,当你静态地打开它们时,内联的表达式会一字不差地显示在你的HTML文件中,所以你可能再也不能把它们用作设计原型了!
浏览器在不使用内联的情况下静态显示代码片段的不同之处在于:
Hello, Sebastian!
使用代码
Hello, [[${session.user.name}]]!
在设计有用性方面非常清楚。
禁用内联
内联机制可以被禁用,因为实际上可能有这样的情况,我们确实希望输出[[...]]或[(...)]序列,而不将其内容作为表达式处理。为此,我们将使用th:inline="none ":
<p th:inline="none">A double array looks like this: [[1, 2, 3], [4, 5]]!</p>
这将导致:
<p>A double array looks like this: [[1, 2, 3], [4, 5]]!</p>