开发学院

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

教程正文

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 &lt;b&gt;great!&lt;/b&gt;"</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>