4.3 选择变量表达式(星号语法)

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

尽管两者之间有一个重要的不同点:星号语法在选好的对象上,而不是整个上下文里对表达式求值。也就是说,只要没有已经选好的对象,美元符号语法与星号语法,实际上做了相同的事情。

那么,已经选好的对象又是什么意思呢?使用th:object属性的表达式结果。让我们在用户资料(userprofile.html)页面使用一个:

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

这等价于:

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

当然,美元符号语法与星号语法可以混合使用:

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

当有一个选好的对象时,也可以使用带#object表达式变量的美元符号表达式:

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

如前所述,如果没有已选好的对象,美元符号语法与星号语法等价。

  1. <div>
  2. <p>Name: <span th:text="*{session.user.name}">Sebastian</span>.</p>
  3. <p>Surname: <span th:text="*{session.user.surname}">Pepper</span>.</p>
  4. <p>Nationality: <span th:text="*{session.user.nationality}">Saturn</span>.</p>
  5. </div>