<footer th:fragment="copy">
푸터 자리 입니다.
</footer>
메인 fragment html 부분
<body>
<h1>부분 포함</h1>
<h2>부분 포함 insert</h2>
<div th:insert="~{template/fragment/footer :: copy}"></div>
<h2>부분 포함 replace</h2>
<div th:replace="~{template/fragment/footer :: copy}"></div>
<h2>부분 포함 단순 표현식</h2>
<div th:replace="template/fragment/footer :: copy"></div>
<h1>파라미터 사용</h1>
<div th:replace="~{template/fragment/footer :: copyParam ('데이터1', '데이터2')}"></div>
</body>
</html>
th:replace
<div th:insert="~{template/fragment/footer :: copy}"></div>
-> 현재 태그 (div) 내부에 template/fragment/footer.html 템플릿에 있는 th:fragment="copy" 라는 부분을 내부에 추가함.
<div th:replace="~{template/fragment/footer :: copy}"></div>
-> replace의 경우는 현재 태그를 대체
<div th:replace="~{template/fragment/footer :: copyParam ('데이터1', '데이터2')}"></div>
template/fragment/footer.html 템플릿에 있는 th:fragment="copyParam('파라미터1','파라미터2')" 부분으로 대체된다.
공통 레이아웃
<html xmlns:th="http://www.thymeleaf.org">
<head th:fragment="common_header(title,links)">
<title th:replace="${title}">레이아웃 타이틀</title>
<!-- 공통 -->
<link rel="stylesheet" type="text/css" media="all" th:href="@{/css/awesomeapp.css}">
<link rel="shortcut icon" th:href="@{/images/favicon.ico}">
<script type="text/javascript" th:src="@{/sh/scripts/codebase.js}"></script>
<!-- 추가 -->
<th:block th:replace="${links}" />
</head>
메인 레이아웃
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head th:replace="template/layout/base :: common_header(~{::title},~{::link})">
<title>메인 타이틀</title>
<link rel="stylesheet" th:href="@{/css/bootstrap.min.css}">
<link rel="stylesheet" th:href="@{/themes/smoothness/jquery-ui.css}">
</head>
<body>
메인 컨텐츠
</body>
</html>
common_header(~{::title},~{::link})
공통 레이아웃에 전달 받은 title과 link를 통해서 공통 레이아웃에 replace로 전달받은 태그로 변경되어서 출력된다.
공용 레이아웃 파일
<!DOCTYPE html>
<html th:fragment="layout (title, content)" xmlns:th="http://www.thymeleaf.org">
<head>
<title th:replace="${title}">레이아웃 타이틀</title>
</head>
<body>
<h1>레이아웃 H1</h1>
<div th:replace="${content}">
<p>레이아웃 컨텐츠</p>
</div>
<footer>
레이아웃 푸터
</footer>
</body>
</html>
메인 레이아웃
<!DOCTYPE html>
<html th:replace="~{template/layoutExtend/layoutFile :: layout(~{::title},~{::section})}"
xmlns:th="http://www.thymeleaf.org">
<head>
<title>메인 페이지 타이틀</title>
</head>
<body>
<section>
<p>메인 페이지 컨텐츠</p>
<div>메인 페이지 포함 내용</div>
</section>
</body>
</html>
공용 레이아웃에 html 부분이 th:fragment 속성이 정의 되어있다.-> 이 레이아웃 파일을 기본으로 하고 여기에 필요한 내용을 부분 부분 받아서 변경하겠다.
현재 메인 레이아웃의 경우 html 자체를 replace하여 공용 레이아웃으로 변경해서 사용했기 때문에 공용레이아웃에 필요한 내용을 전달하면서 html 자체를 공용레이아웃으로 변경한다.