웹 페이지 개발 시, 상하단 영역이나 좌측 카테고리 등 여러 페이지에 걸쳐 함께 사용하는 공통 영역이 많이 있다. 이러한 부분들을 하나씩 코드를 복사하여 개발한다면, 향후 수정 시에 각 페이지마다 수정하는 시간 소모를 필요로 한다. 이것은 상당히 비효율적이며, 해당 문제를 해결하기 위해 타임리프의 템플릿 조각과 레이아웃 기능 사용한다.

 

 

Controller

@Controller
@RequestMapping("/template")
public class TemplateController {
	@GetMapping("/fragment")
	public String template() {
	return "template/fragment/fragmentMain";
	}
}

 

Footer

<footer th:fragment="copy">
 푸터 자리 입니다.
</footer>

<footer th:fragment="copyParam (param1, param2)">
	<p>파라미터 자리 입니다.</p>
	<p th:text="${param1}"></p>
	<p th:text="${param2}"></p>
</footer>

th:fragment 가 있는 태그는 다른 곳에 포함되는 코드 조각의 개념으로 이해

 

 

1. HTML (부분 포함 insert)

<h2>부분 포함 insert</h2>
<div th:insert="~{template/fragment/footer :: copy}"></div>

1. 결과 (부분 포함 insert)

<h2>부분 포함 insert</h2>
<div>
<footer>
푸터 자리 입니다.
</footer>
</div>
<div th:insert="~{template/fragment/footer :: copy}"></div>
  • th:insert 를 사용하여 현재 태그 <div> 내부에 추가

 

 

 

2. HTML (부분 포함 replace)

<h2>부분 포함 replace</h2>
<div th:replace="~{template/fragment/footer :: copy}"></div>

2. 결과 (부분 포함 replace)

<h2>부분 포함 replace</h2>
<footer>
푸터 자리 입니다.
</footer>
<div th:replace="~{template/fragment/footer :: copy}"></div>
  • th:replace 를 사용하면 현재 태그 <div> 를 대체

 

 

 

3. HTML (부분 포함 단순 표현식)

<h2>부분 포함 단순 표현식</h2>
<div th:replace="template/fragment/footer :: copy"></div>

3. 결과 (부분 포함 단순 표현식)

<h2>부분 포함 단순 표현식</h2>
<footer>
푸터 자리 입니다.
</footer>
<div th:replace="template/fragment/footer :: copy"></div>
  • ~{ . . . } 사용이 원칙이지만, 템플릿 조각을 사용하는 코드가 단순하면 해당 부분을 생략해도 무관

 

 

4. HTML (파라미터 사용)

<h1>파라미터 사용</h1>
<div th:replace="~{template/fragment/footer :: copyParam ('데이터1', '데이터2')}"></div>

4. 결과 (파라미터 사용)

<h1>파라미터 사용</h1>
<footer>
<p>파라미터 자리 입니다.</p>
<p>데이터1</p>
<p>데이터2</p>
</footer>
<div th:replace="~{template/fragment/footer :: copyParam ('데이터1', '데이터2')}"></ div>
  • 다음 코드와 같이 파라미터 전달을 통해 조각 렌더링 가능

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'Thymeleaf' 카테고리의 다른 글

[Thymeleaf] 타임리프 스프링 통합  (0) 2023.03.10
[Thymeleaf] 템플릿 레이아웃  (0) 2023.03.09
[Thymeleaf] 자바스크립트 인라인  (0) 2023.01.31
[Thymeleaf] 블록  (0) 2023.01.30
[Thymeleaf] 주석  (0) 2023.01.29

+ Recent posts