12.1 内联表达式

尽管标准方言允许我们使用标签属性完成几乎任何事情,但有时候我们还是希望直接在HTML文本中写表达式。比如,我们希望写成如下形式:

<p>Hello, [[${session.user.name}]]!</p>

而不是:

<p>Hello, <span th:text="${session.user.name}">Sebastian</span>!</p>

Thymeleaf中位于[[...]]或是[(...)]中的表达式被认为是内联表达式,在这里面我们可以使用任何在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 &lt;b&gt;great!&lt;/b&gt;"</p>

注意内联文本在markup所有标签体中都是默认开启的 -- 不只是标签本身 --,因此我们无需去开启它。

内联 vs 自然模板


如果你之前使用过别的模板引擎,那里的规范是直接在文本中输出,你可能会问:为什么我们不一开始就这么做?这意味着使用比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>

results matching ""

    No results matching ""