Trong template Thymeleaf
, để lấy các thông tin trong Model. bạn sẽ sử dụng Thymeleaf Standard Expression
.
Ở bài này chúng ta sẽ đề cập đến 4 loại Expression
sau:
${...}
: Lấy giá trị của một biến.*{...}
: Lấy giá trị của một biến được chỉ định#{...}
: Lấy message@{...}
: Lấy đường dẫn URL dựa theo context của server
${...}
- Lấy giá trị của một biến (Variables Expressions)
Ví dụ, trên Controller bạn đưa vào một số giá trị:
model.addAttribute("techMely", "kenh day lap trinh hap dan");
Để lấy giá trị của biến today, ta sử dụng ${...}
<p>Techmely la: <span th:text="${today}"></span>.</p>
Kết quả sẽ in ra:
ctx.getVariable("today");
*{...}
- Lấy giá trị của một biến được chỉ định (Variables Expressions on selections)
Chức năng của nó giống với ${...}
là lấy giá trị của một biến.
Điểm khác biệt là *{...}
sẽ lấy ra giá trị của một biến cho trước bởi th:object, còn ${...}
sẽ lấy ra giá trị cục bộ trong Context hay Model.
Ví dụ:
<div th:object="${session.user}"> <!-- th:object tồn tại trong phạm vi của thẻ div này -->
<!-- Lấy ra tên của đối tượng session.user -->
<p>
Name: <span th:text="*{firstName}"></span> <!-- Lấy ra firstName của đối tượng session.user -->
</p>
<p>
Surname: <spanth:text="*{lastName}"></span>. <!-- Lấy ra lastName của đối tượng session.user -->
</p>
</div>
Đoạn code này tương đương:
<div>
<p>Name: <span th:text="${session.user.firstName}"></span>.</p>
<p>Surname: <spanth:text="${session.user.lastName}"></span>.</p>
</div>
#{...}
- Lấy message (Message Expression)
Ví dụ, trong file config .properties
có một message chào người dùng bằng nhiều ngôn ngữ.
home.welcome = Hello, how's it going!
Thì cách lấy nó ra nhanh nhất là:
<p th:utext="#{home.welcome}">Xin chào các bạn!</p>
Đoạn text tiếng việt "Xin chào các bạn!" bên trong thẻ p sẽ bị thay thế bởi Thymeleaf
khi render #{home.welcome}
.
@{...}
- Lấy đường dẫn URL (URL Expression)
@{...}
xử lý và trả ra giá trị URL theo context của máy chủ cho chúng ta.
Ví dụ:
<!-- tương đương với 'http://localhost:8080/order/details?orderId=3' -->
<a href="details.html" th:href="@{http://localhost:8080/order/details(orderId=${o.id})}">view</a>
<!-- tương đương '/order/details?orderId=3' -->
<a href="details.html" th:href="@{/order/details(orderId=${o.id})}">view</a>
<!-- tương dương '/gtvg/order/3/details' -->
<a href="details.html" th:href="@{/order/{orderId}/details(orderId=${o.id})}">view</a>
Nếu bắt dầu bằng dấu /
thì nó sẽ là Relative URL và sẽ tương ứng theo context của máy chủ của bạn.