Spring/Spring Boot & Thymeleaf
[Spring Boot & Thymeleaf] 10. 반복
Kloong
2022. 10. 24. 18:08
참고
더보기
Spring Boot & Thymeleaf 시리즈는 김영한 님의 "스프링 MVC 2편 - 백엔드 웹 개발 활용 기술" 강의를 정리한 글입니다. 글에 첨부된 사진은 해당 강의의 강의 자료에서 캡쳐한 것입니다. 제 Github에만 올려뒀다가, 정보 공유와 강의 홍보(?)를 위해 블로그에도 업로드합니다.
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 - 인프런 | 강의
웹 애플리케이션 개발에 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. MVC 2편에서는 MVC 1편의 핵심 원리와 구조 위에 실무 웹 개발에 필요한 모든 활용 기술들을 학습할 수 있
www.inflearn.com
마크다운 형식으로 작성한 글을 블로그에 다시 올리는 거라 가독성이 많이 떨어집니다. 조금더 편하게 보시려면 아래의 Github repository에서 보시면 됩니다.
GitHub - Kloong1/TIL: Today I Learned.
Today I Learned. Contribute to Kloong1/TIL development by creating an account on GitHub.
github.com
타임리프 - 반복
타임리프에서 반복은 th:each
를 사용한다. 추가로 loop 안에서 사용할 수 있는 여러 상태 값을 지원한다.
BasicController.java 내용 추가
package kloong.thymeleaf.basic;
import ... //생략
@Controller
@RequestMapping("/basic")
public class BasicController {
@GetMapping("/each")
public String each(Model model) {
addUsers(model);
return "basic/each";
}
//다른 예제에도 쓸 코드이므로 메소드로 빼놓음.
private void addUsers(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);
}
}
/resources/templates/basic/each.html
<!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>userStat</th>
</tr>
<tr th:each="user, userStat : ${users}">
<td th:text="${userStat.count}">count</td>
<td th:text="${user.username}">username</td>
<td th:text="${user.age}">age</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>
반복 기능 - th:each
<tr th:each="user : ${users}">
- 반복시
:
의 오른쪽에 위치한 컬렉션(위 HTML에서는${users}
)의 값을 하나씩 꺼내서,:
의 왼쪽에 위치한 변수(위 HTML에서는user
)에 담아th:each
가 있는 태그를 반복하여 생성/실행한다. th:each
는List
뿐만 아니라 배열,java.util.Iterable
,java.util.Enumeration
을 구현한 모든 객체에 적용 가능하다.Map
도 사용할 수 있는데, 이 경우 변수에 담기는 값은Map.Entry
이다.
반복 상태 정보
<tr th:each="user, userStat : ${users}">
- 반복의 두 번째 파라미터를 설정해서 loop의 상태를 확인 할 수 있다.
- 두번째 파라미터는 생략 가능한데, 생략하면
지정한 변수명 + Stat
이 된다. - 여기서는 두 번째 파라미터 이름이
user + Stat = userStat
이므로, 해당 파라미터의 선언을 하지 않아도 정상적으로 동작한다.
반복 상태 기본 변수
index
: 0부터 시작하는 값count
: 1부터 시작하는 값size
: 전체 사이즈even
,odd
: 홀수, 짝수 여부( boolean )first
,last
:처음, 마지막 여부( boolean )current
: 현재 객체