[Spring MVC] Thymeleaf 반복문 처리, 상태변수 접근 (index)
타임리프(Thymeleaf) 템플릿에서는 for문, while문 등과 유사한 반복 처리(iteration) 처리를 위해 th:each를 사용한다.
루프 처리중 상태를 추적하는 status 변수를 이용하여 index, count 등을 얻을 수 있다.
loop를 원칙적으로 break 하거나 다른 곳에서 사용하는 것이 불가하다는 제한사항이 있지만 Thymeleaf가 View Template Engine이기 때문에 비즈니스 로직을 view에 작성하는 것을 지양해야한다.
th:each
반복하는 html 엘리먼트에 th:each 속성을 사용하여 Collection을 반복하여 화면을 처리한다.
<table class="tb_col">
<thead>
<th>seq</th>
<th>name</th>
<th>price</th>
<th>quantity</th>
</thead>
<tbody>
<tr th:each="product : ${productList}">
<td th:text="${product.seq}"></td>
<td th:text="${product.name}"></td>
<td th:text="${product.price}"></td>
<td th:text="${product.quantity}"></td>
</tr>
</tbody>
</table>
#numbers.sequence
컬렉션 없이 단순 반복 처리를 하고 싶다면 Number(org.thymeleaf.expression.Numbers) 클래스의 utility 메서드인 #numbers.sequence을 사용하여 먼저 원하는 반복 횟수만큼의 배열을 생성하고 th:each의 컬렉션에 넣으면 된다.
<tr:block th:each="num : ${#numbers.sequence(1,5)}">
<td th:text="${num}"></td>
</tr:block>
반복 상태 변수 (status)
Thymeleaf에서 th:each를 사용하면 반복 상태를 추적할 수 있는 status 변수를 제공해준다. 이를 이용하여 index, count 등 값을 추출할 수 있다.
- index 현재 반복 인덱스 (0부터 시작)
- count 현재 반복 인덱스 (1부터 시작)
- size 총 요소 수
- current 현재 요소
- even 현재 반복이 짝수인지 여부 (boolean)
- add 현재 반복이 홀수인지 여부 (boolean)
- first 현재 반복이 첫번째인지 여부 (boolean)
- last 현재 반복이 마지막인지 여부 (boolean)
status 변수는 기본적으로 오브젝트명 + "Stat" 변수명으로 접근할 수 있으며 th:each 선언시 개발자가 직접 명명하여 사용할 수 있다.
<div th:each="num : ${#numbers.sequence(1,3)}">
<p th:text="${'index : ' + numStat.index}"></p>
<p th:text="${'count : ' + numStat.count}"></p>
<p th:text="${'size : ' + numStat.size}"></p>
<p th:text="${'current : ' + numStat.current}"></p>
<p th:text="${'even : ' + numStat.even}"></p>
<p th:text="${'odd : ' + numStat.odd}"></p>
<p th:text="${'first : ' + numStat.first}"></p>
<p th:text="${'last : ' + numStat.last}"></p>
</div>
참고
https://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf.html#using-theach
'web > Spring' 카테고리의 다른 글
[Spring JPA] Multiple Databases 다중 DB 연결하기 (0) | 2022.03.08 |
---|---|
[Spring Boot] @ConfigurationProperties 사용법 (0) | 2022.03.07 |
[Spring] Apache POI 를 이용한 엑셀 파일 읽기 (0) | 2022.02.28 |
[Spring Mybatis] resultMap (0) | 2022.02.11 |
[Spring Boot] 기본 포트 설정하는 방법 (0) | 2022.01.26 |
댓글 개