BackEnd/Thymeleaf

[Thymeleaf] 반복

샤아이인 2022. 1. 27.

인프런 김영한님의 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

댓글