Thymeleaf 教程

选择表达式(星号语法)

变量表达式不仅可以写成 ${...},也可以写成 *{...}。

但有一个重要的区别:*{...} 语法针对选定对象而不是整个上下文计算表达式。也就是说,只要没有选定的对象,${...} 和 *{...} 语法的作用就完全相同。

那么什么是选择对象呢?是一个使用 th:object 属性的表达式的结果。让我们在我们的用户配置文件(userprofile.html)页面中使用星号表达式,如下:

<div th:object="${session.user}">
    <p>Name: <span th:text="*{firstName}">Sebastian</span>.</p>
    <p>Surname: <span th:text="*{lastName}">Pepper</span>.</p>
    <p>Nationality: <span th:text="*{nationality}">Saturn</span>.</p>
</div>

上述代码中,th:object="${session.user}" 表示选择了 session 对象中的 user 对象。这相当于:

<div>
    <p>Name: <span th:text="${session.user.firstName}">Sebastian</span>.</p>
    <p>Surname: <span th:text="${session.user.lastName}">Pepper</span>.</p>
    <p>Nationality: <span th:text="${session.user.nationality}">Saturn</span>.</p>
</div>

使用选择对象明显可以简化表达式,避免编写类似 ${session.user.firstName} 繁琐的表达式。

当然,${...} 和 *{...} 语法可以混合使用,如下:

<div th:object="${session.user}">
    <p>Name: <span th:text="*{firstName}">Sebastian</span>.</p>
    <p>Surname: <span th:text="${session.user.lastName}">Pepper</span>.</p>
    <p>Nationality: <span th:text="*{nationality}">Saturn</span>.</p>
</div>

当一个选择对象就绪时,被选择的对象也将作为 #object 表达式变量提供给 ${...} 表达式,如下:

<div th:object="${session.user}">
    <p>Name: <span th:text="${#object.firstName}">Sebastian</span>.</p>
    <p>Surname: <span th:text="${session.user.lastName}">Pepper</span>.</p>
    <p>Nationality: <span th:text="*{nationality}">Saturn</span>.</p>
</div>

如上所述,如果没有执行任何对象选择,则 ${...} 和 *{...} 语法是等价的。如下:

<div>
    <p>Name: <span th:text="*{session.user.name}">Sebastian</span>.</p>
    <p>Surname: <span th:text="*{session.user.surname}">Pepper</span>.</p>
    <p>Nationality: <span th:text="*{session.user.nationality}">Saturn</span>.</p>
</div>
说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号