选择变量表达式与变量表达式功能基本一致,只是在变量表达式的基础上增加了与 th:object 的配合使用。
当使用 th:object 存储一个对象后,我们可以在其后代中使用选择变量表达式(*{...})获取该对象中的属性,其中,“*” 即代表该对象。
为什么需要选择变量表达式?如果我们需要在页面上面显示一个用户信息,没有选择变量表达式,做法如下:
<ul> <li th:text="${user.id}"></li> <li th:text="${user.username}"></li> <li th:text="${user.age}"></li> <li th:text="${user.sex}"></li> <li th:text="${user.email}"></li> <li th:text="${user.phoneNum}"></li> </ul>
上面代码中,我们重复写了 “user.” 字符串 5 次。如果用户信息非常多,而且 user 变量名也很长(如:safeOpeationUserInfo 安全操作员信息)时,增加了我们的工作量(如果我们要对 user 变量重命名,需要将所有 user 进行重命名),而且代码看上去特别臃肿。如下:
<ul> <li th:text="${safeOpeationUserInfo.id}"></li> <li th:text="${safeOpeationUserInfo.username}"></li> <li th:text="${safeOpeationUserInfo.age}"></li> <li th:text="${safeOpeationUserInfo.sex}"></li> <li th:text="${safeOpeationUserInfo.email}"></li> <li th:text="${safeOpeationUserInfo.phoneNum}"></li> </ul>
为了解决这个问题,Thymeleaf 提供了对象选择表达式,使用它重写上面代码(注意:th:object 用于存储一个临时变量,该变量只在该标签及其后代中有效)。代码如下:
<ul th:object="${user}"> <li th:text="*{id}"></li> <li th:text="*{username}"></li> <li th:text="*{age}"></li> <li th:text="*{sex}"></li> <li th:text="*{email}"></li> <li th:text="*{phoneNum}"></li> </ul>
渲染结果如下:
<ul> <li>1000</li> <li>Tom</li> <li>28</li> <li>男</li> <li>tom@163.com</li> <li>15178675665</li> </ul>