Thymeleaf

[Thymeleaf] 변수 - SpringEL

GreedyBE 2022. 12. 17. 00:34

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'를 찾고 메서드 직접 호출