인프런 김영한님의 Spring강의에서 공부한것을 올리며, Thymeleaf의 경우 unit 단위로 공부후 각각 정리하는 글을 작성하겠습니다.
반복
타임리프에서 반복은 th:each 를 사용한다. 추가로 반복에서 사용할 수 있는 여러 상태 값을 지원한다.
우선 컨트롤러에서 여러 User의 정보를 담아서 model로 반환해 봅시다.
@GetMapping("/each")
public String each(Model model){
List<User> list = new ArrayList<>();
list.add(new User("UserA", 10));
list.add(new User("UserB", 20));
list.add(new User("UserC", 30));
model.addAttribute("users", list);
return "basic/each";
}
이제 이 데이터를 처리할 뷰 코드를 확인해 봅시다.
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>기본 테이블</h1>
<table border="1">
<tr>
<th>username</th>
<th>age</th>
</tr>
<tr th:each="user : ${users}">
<td th:text="${user.username}">username</td>
<td th:text="${user.age}">0</td>
</tr>
</table>
<h1>반복 상태 유지</h1>
<table border="1">
<tr>
<th>count</th>
<th>username</th>
<th>age</th>
<th>etc</th>
</tr>
<tr th:each="user, userStat : ${users}">
<td th:text="${userStat.count}">username</td>
<td th:text="${user.username}">username</td>
<td th:text="${user.age}">0</td>
<td>
index = <span th:text="${userStat.index}"></span>
count = <span th:text="${userStat.count}"></span>
size = <span th:text="${userStat.size}"></span>
even? = <span th:text="${userStat.even}"></span>
odd? = <span th:text="${userStat.odd}"></span>
first? = <span th:text="${userStat.first}"></span>
last? = <span th:text="${userStat.last}"></span>
current = <span th:text="${userStat.current}"></span>
</td>
</tr>
</table>
</body>
</html>
결과는 다음과 같습니다.
▶ 반복 기능
<tr th:each="user : ${users}">
반복하려면 오른쪽 컬렉션인 users의 값을 하나씩 꺼내서 왼쪽 변수 user 에 담아 태그를 반복 실행하게 됩니다.
th:each는 단순 list 뿐만 아니라, java.util.Iterable , java.util.Enumeration 을 구현한 모든 객체를 반복에 사용할 수 있습니다.
Map 도 사용할 수 있는데 이 경우 변수에 담기는 값은 Map.Entry 입니다.
▶ 반복 상태 정보
반복을 돌면서 각 원소의 정보를 어떻게 구할까? 예를 들어 index번호 라던가?, 마지막 원소인지 확인한다거나? 등등 여러 상태 정보가 필요하다. 이럴떄를 위해 타임리프 에서는 두번째 파라미터를 설정하여 상태를 확인할 수 있습니다.
우리의 예제에서는 두번째 파라미터로 userStat 을 추가하였습니다.
<tr th:each="user, userStat : ${users}">
- index : 0부터 시작하는 값
- count : 1부터 시작하는 값
- size : 전체 사이즈
- even , odd : 홀수, 짝수 여부( boolean )
- first , last :처음, 마지막 여부( boolean )
- current : 현재 객체
두번째 파라미터는 생략이 가능한데, 생략하면 지정한 변수명( user ) + Stat 가 됩니다.
여기서는 user + Stat = userStat 이므로 생략 가능합니다.
생략을 해도 다른 곳에서 상태정보를 사용하기위해 userStat.index 와 같이 사용하고 있으니 상관없이 적용 됩니다.
'BackEnd > Thymeleaf' 카테고리의 다른 글
[Thymeleaf] 주석 (0) | 2022.01.28 |
---|---|
[Thymeleaf] 조건부 평가 (0) | 2022.01.27 |
[Thymeleaf] 속성 값 설정 (0) | 2022.01.27 |
[Thymeleaf] 연산 (0) | 2022.01.26 |
[Thymeleaf] Literals (0) | 2022.01.26 |
댓글