Thymeleaf 教程

内联表达式

尽管标准方言允许我们使用标签属性来做几乎所有的事情,但在有些情况下,我们更愿意将表达式直接写进我们的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 变量:

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>

结果中,<b> 标签将被 html 转义:

<p>The message is "This is &lt;b&gt;great!&lt;/b&gt;"</p>

注意,默认情况下,每个标签正文中的内联表达式都是激活的,不需要我们进行特别配置去开启内联表达式。

内联表达式与自然模板

如果你使用过其他模板引擎,其中这种通过内联输出文本的方式是常态,你可能会问。为什么我们不从一开始就这样做呢?这比使用 th:text 属性的代码要少得多!

好吧,因为尽管你可能觉得内联很有趣,但你应该永远记住,当你打开你的静态 HTML 文件时,内联表达式会逐字显示,所以你可能无法再把它们作为设计原型来使用了

浏览器如何在不使用内联的情况下静态显示代码片段之间的区别。如下:

Hello, Sebastian!

使用内联表达式,设置用户名称:

Hello, [[${session.user.name}]]!

上面代码一看便知,在实用性方面,不可取啊……完全不能当做原型使用。

禁用内联表达式

在 Thymeleaf 中,内联表达式机制是可以被禁用的,因为实际上可能有一些场合我们确实想输出 [[...]] 或 [(...)] 序列,而不将其内容作为表达式处理。为此,我们将使用 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>
说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号