betacode

Использование Thymeleaf th:object и синтаксиса asterisk *{ }

  1. th:object  и синтаксис Asterisk
  2. Spring Boot Form

1. th:object  и синтаксис Asterisk

В Thymeleaf выражение переменной (variable expression) имеет синтаксис ${ }. Помимо этого *{ } это так же часто используемое выражение переменной, в данной статье мы изучим его.
Синтаксис звездочки (Asterisk Syntax) оценивает выражения на выбранных объектах, а не на весь контекст. Для выбора объекта вы используете атрибут th:object. Смотрите простой пример ниже:
(Asterisk syntax)
<div th:object = "${person}" class="box">
  <p><b>Full Name:</b> <span th:utext="*{fullName}"></span></p>
  <p><b>Email:</b> <span th:utext="*{email}"></span></p>
</div>
Он точно равен:
(Dollar syntax)
<div class="box">
  <p><b>Full Name:</b> <span th:utext="${person.fullName}"></span></p>
  <p><b>Email:</b> <span th:utext="${person.email}"></span></p>
</div>
И конечно вы можете смешать синтаксис звездочки (Asterisk syntax) и синтаксис доллара (Dollar syntax) друг с другом, например:
(Mix syntax)
<div th:object = "${person}" class="box">
  <p><b>Full Name:</b> <span th:utext="*{fullName}"></span></p>
  <p><b>Email:</b> <span th:utext="${person.email}"></span></p>
</div>
Что происходит, когда вы не выбираете ни один объект, но используете синтаксис звездочки *{ }. В данном случае ${ } и *{ } работают одинаково.
<div class="box">
  <p><b>Full Name:</b> <span th:utext="*{person.fullName}"></span></p>
  <p><b>Email:</b> <span th:utext="*{person.email}"></span></p>
</div>
<!--/* Same as: */-->
<div class="box">
  <p><b>Full Name:</b> <span th:utext="${person.fullName}"></span></p>
  <p><b>Email:</b> <span th:utext="${person.email}"></span></p>
</div>

2. Spring Boot Form

В Spring Boot, при обработке Form вы часто встречаете синтаксис звездочки (Asterisk Syntax):
(Form)
<form th:action="@{/register}" th:object="${appUserForm}" method="POST">
    User Name:
    <input type="text" th:field="*{userName}" />
    <br/> Password:
    <input type="password" th:field="*{password}" />
    <br/> Confirm:
    <input type="password" th:field="*{confirmPassword}" />
    <br/> Email:
    <input type="text" th:field="*{email}" />
    <br/>
    <input type="submit" value="Submit" />
</form>