In this tutorial, you will learn five types of Thymeleaf Standard Expressions - Variable, Selection, Message, Link, and Fragment expressions.
Thymeleaf Standard Expressions
There are five types of Thymeleaf standard expressions:
- ${...}: Variable expressions
- *{...} : Selection expressions
- #{...} : Message (i18n) expressions
- @{...} : Link (URL) expressions
- ~{...}: Fragment expressions
Let's understand each of these Thymeleaf Standard Expressions with an example.
Let's create a Spring boot project using the spring initializr and add Spring Web and Thymeleaf dependencies:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Next, let's create a User model class with the following content into it:
package net.javaguides.thymeleaf.model;
public class User {
private String name;
private String email;
private String role;
private String gender;
public User(String name, String email, String role, String gender) {
this.name = name;
this.email = email;
this.role = role;
this.gender = gender;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
}
1. Variable expressions
Variable expressions are the most commonly used ones in the Thymeleaf templates. These expressions help bind the data from the template context(model) into the resulting HTML(view).
1. Create a handler method to handle the http://localhost:8080/variable-expression request
@GetMapping("variable-expression") public String variableExpression(Model model){ User user = new User("ramesh","ramesh@gmail.com", "ADMIN", "M"); model.addAttribute("user", user); return "variable-expression"; }
2. Thymeleaf template with Variable expressions
<!DOCTYPE html>
<html lang="en"
xmlns:th="http://www.thymeleaf.org"
>
<head>
<meta charset="UTF-8">
<title>Variable Expression</title>
</head>
<body>
<h1>Variable Expression Demo:</h1>
<h2>User Details</h2>
<div>
<p>Name: <strong th:text="${user.name}"></strong></p>
<p>Email: <strong th:text="${user.email}"></strong></p>
<p>Role: <strong th:text="${user.role}"></strong></p>
<p>Gender: <strong th:text="${user.gender}"></strong></p>
</div>
</body>
</html>
Demo:
Run the Spring boot application and hit the below link in the browser:
2. Selection expressions
1. Create a handler method to handle the http://localhost:8080/variable-expression request
@GetMapping("selection-expression")
public String selectionExpression(Model model){
User user = new User("ramesh","ramesh@gmail.com", "ADMIN", "M");
model.addAttribute("user", user);
return "selection-expression";
}
2. Thymeleaf template with Selection expressions
<!DOCTYPE html>
<html lang="en"
xmlns:th="http://www.thymeleaf.org"
>
<head>
<meta charset="UTF-8">
<title>Selection Expression</title>
</head>
<body>
<h1>Selection Expression Demo:</h1>
<h2>User Details</h2>
<div th:object="${user}">
<p>Name: <strong th:text="*{name}"></strong></p>
<p>Email: <strong th:text="*{email}"></strong></p>
<p>Role: <strong th:text="*{role}"></strong></p>
<p>Gender: <strong th:text="*{gender}"></strong></p>
</div>
</body>
</html>
Demo: Run the Spring boot application and hit the below link in the browser:
3. Message Expressions
1. Create messages.properties file and add the following content
app.name=Blog Application
welcome.message=Hello, welcome to our blog application
2. Create a handler method to handle the http://localhost:8080/message-expression request
@GetMapping("message-expression")
public String messageExpression(){
return "message-expression";
}
3. Thymeleaf template with Message expressions
<!DOCTYPE html>
<html lang="en"
xmlns:th="http://www.thymeleaf.org"
>
<head>
<meta charset="UTF-8">
<title>Message Expression</title>
</head>
<body>
<h1>Message Expression Demo:</h1>
<h2 th:text="#{app.name}"></h2>
<h2 th:text="#{welcome.message}"></h2>
</body>
</html>
Demo: Run the Spring boot application and hit the below link in the browser:
4. Link Expressions
1. Create a handler method to handle the http://localhost:8080/message-expression request
@GetMapping("link-expression")
public String linkExpression(Model model){
model.addAttribute("id", "1");
return "link-expression";
}
2. Thymeleaf template with Link expressions
- How to define a link in the Thymeleaf template
<a th:href="@{/message}"> HelloWorld Link</a>
- How to define a link for the external CSS file
<link th:href="@{/css/demo.css}" rel="stylesheet" />
- How to define a parameter in a URL using Link expressions
<a th:href="@{/message/{id}(id=${id})}"> Link with Parameter</a>
Complete code:
<!DOCTYPE html>
<html lang="en"
xmlns:th="http://www.thymeleaf.org"
>
<head>
<meta charset="UTF-8">
<title>Link Expressions</title>
<link th:href="@{/css/demo.css}" rel="stylesheet" />
</head>
<body>
<a th:href="@{/message}"> HelloWorld Link</a>
<a th:href="@{/message/{id}(id=${id})}"> Link with Parameter</a>
</body>
</html>
Demo: Run the Spring boot application and hit the below link in the browser:
5. Fragment Expressions
Create header.html and footer.html fragment files in a resources/templates/common folder:
common/header.html
<!DOCTYPE html>
<html lang="en"
xmlns:th="http://www.thymeleaf.org"
>
<head>
<meta charset="UTF-8">
<title>Header</title>
</head>
<body>
<div th:fragment="header">
<h1>Header Part</h1>
<hr/>
</div>
</body>
</html>
common/footer.html
<!DOCTYPE html>
<html lang="en"
xmlns:th="http://www.thymeleaf.org"
>
<head>
<meta charset="UTF-8">
<title>Footer</title>
</head>
<body>
<div th:fragment="footer">
<hr/>
<h1>Footer Part</h1>
</div>
</body>
</html>
Create handler method
@GetMapping("fragment-expression")
public String fragmentExpression(){
return "fragment-expression";
}
Thymeleaf template with fragment expressions
<!DOCTYPE html>
<html lang="en"
xmlns:th="http://www.thymeleaf.org"
>
<head>
<meta charset="UTF-8">
<title>Fragment Expression</title>
</head>
<body>
<div th:replace="~{common/header :: header }"></div>
<div>
<h1> Page Body</h1>
</div>
<div th:replace="~{common/footer :: footer}"></div>
</body>
</html>
Demo: Run the Spring boot application and hit the below link in the browser:
Comments
Post a Comment