th:block
은 HTML 태그가 아닌 타임리프의 유일한 자체 태그입니다.
package hello.thymeleaf.basic;
import lombok.Data;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Controller
@RequestMapping("/basic")
public class BasicController {
...
@GetMapping("/block")
public String block(Model model) {
addUsers(model);
return "basic/block";
}
...
}
<!DOCTYPE html>
<html xmlns:th="<http://www.thymeleaf.org>">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<th:block th:each="user : ${users}">
<div>
사용자 이름1 <span th:text="${user.username}"></span>
사용자 나이1 <span th:text="${user.age}"></span>
</div>
<div>
요약 <span th:text="${user.username} + ' / ' + ${user.age}"></span>
</div>
</th:block>
</body>
</html>
즉, 여러개를 묶어서 반복하고 싶을 때 사용합니다.
반복을 사용하려면 아래처럼 태그에 바로 th:each를 붙여야합니다.
<div th:each="user : ${users}">
사용자 이름1 <span th:text="${user.username}"></span>
사용자 나이1 <span th:text="${user.age}"></span>
</div>
<div th:each="user : ${users}">
요약 <span th:text="${user.username} + ' / ' + ${user.age}"></span>
</div>
그런데 이렇게 하면 첫번째 div 태그가 쭉 반복이 되고 이후에 두번째 div 태그가 반복됩니다.
한번에 2개의 div 태그를 같이 반복하고 싶을 때 블록을 사용하는 것입니다.
실행
th:block 은 렌더링시 제거됩니다.
<aside> ✏️ 당연히 이런 것은 안쓰는게 좋습니다. 하지만 어쩔 수 없이 사용해야할 때가 있습니다. 그럴 때 사용하면 됩니다.
</aside>