[Thymeleaf] 변수 - SpringEL
Thymeleaf는 변수를 표현하기 위해 다음과 같은 변수 표현식을 사용하며, 해당 표현식에는 스프링이 제공하는 스프링 EL을 사용할 수 있다.
$ { . . . }
아래의 예제를 통해 SpringEL 다양한 표현식 사용의 몇 가지 예를 소개하고자 한다.
User
@Data
static class User {
private String username;
private int age;
public User(String username, int age) {
this.username = username;
this.age = age;
}
}
Controller
@GetMapping("/variable")
public String variable(Model model) {
User userA = new User("userA", 10);
User userB = new User("userB", 20);
List<User> list = new ArrayList<>();
list.add(userA);
list.add(userB);
Map<String, User> map = new HashMap<>();
map.put("userA", userA);
map.put("userB", userB);
model.addAttribute("user", userA);
model.addAttribute("users", list);
model.addAttribute("userMap", map);
return "basic/variable";
}
.HTML
<html xmlns:th="http://www.thymeleaf.org">
<body>
<ul>Object
<li>${user.username} = <span th:text="${user.username}"></span></li>
<li>${user['username']} = <span th:text="${user['username']}"></span></li>
<li>${user.getUsername()} = <span th:text="${user.getUsername()}"></span></li>
</ul>
Object
th:text="${user.username}" : model에 담긴 'user'의 'username'을 프로퍼티 접근 → user.getUesrname()
th:text="${user['username']}" : 위의 'user.username'와 동일 → user.getUesrname()
th:text="${user.getUsername()}" : 'user'의 getUsername() 을 직접 호출
<ul>List
<li>${users[0].username} = <span th:text="${users[0].username}"></span></li>
<li>${users[0]['username']} = <span th:text="${users[0]['username']}"></span></li>
<li>${users[0].getUsername()} = <span th:text="${users[0].getUsername()}"></span></li>
</ul>
List
th:text="${users[0].username}" : model에 담긴 'users' List에서 첫 회원의 'username' 프로퍼티 접근 → list.get(0).getUsername()
th:text="${users[0]['username']}" : 위의 'users[0].username'와 동일 → list.get(0).getUsername()
th:text="${users[0].getUsername()}" : List에서 첫 회원의 메서드 직접 호출
<ul>Map
<li>${userMap['userA'].username} = <span th:text="${userMap['userA'].username}"></span></li>
<li>${userMap['userA']['username']} = <span th:text="${userMap['userA']['username']}"></span></li>
<li>${userMap['userA'].getUsername()} = <span th:text="${userMap['userA'].getUsername()}"></span></li>
</ul>
Map
th:text="${userMap['userA'].username}" : model에 담긴 'userMap'의 Map에서 'userA'를 찾고, 'username' 프로퍼티 접근 → map.get{"userA"}.getUsername()
th:text="${userMap['userA']['username']}" : 위의 'userMap['userA'].username'와 동일 → map.get{"userA"}.getUsername()
th:text="${userMap['userA'].getUsername()}" : Map에서 'userA'를 찾고 메서드 직접 호출