본문 바로가기
✨ Back-end/Spring-Boot

[Spring] 페이지 나누기 (Thymeleaf Fragment ) 기능 적용

by 환풍 2023. 3. 16.
728x90
반응형

 

 

일단 페이지 실행을 위해 세개만 프로젝트를 만들 때 위 세개만 체크해주고 생성했다.

 

 

implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect'  

위 코드를 build.gradle에 dependencies 

 

위와 같이 build.gradle을 수정해주면 반드시 프로젝트 우클릭해서 Gradle -> Refresh Gradle Project를 클릭해주자.

 

 

templates에 두개의 폴더를 만들어준다.

content와 fragment를 만들어주었다.

 

그리고 왼쪽과 같이 content / board_list.html

fragment / header.html과 user_layout.html 을 만들어준다.

 

 

 

 

 

 

user_layout.html

xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"

위 코드를 html에 추가.

그리고 밑에 <th:block> 태그를 이용하여 코드를 만들어준다.

<th:block th:replace="~{fragment/header::headerFragment}"></th:block> 은 헤더를 담당한다.

<th:block layout:fragment="content"></th:block> 은 content라는 이름을 가진 내용들이 들어올 곳이다.

 

header.html

header.html 파일에서는<head>, <title>, <body> 등 <html>을 제외하고 모두 날려준다.

이후 <th:block> 태그를 이용하여 타임리프를 써주어 user_layout.html의 replace에서 정의해주었던 headerFragment 사용.

 

board_list.html

xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"

layout:decorate="~{fragment/user_layout}"

위 코드 두 줄을 추가해주자.

이후 user_layout.html의 layout:fragment="content"와 같이 <th:block>을 생성하고 태그 안에 코드를 작성하면 된다.

 

board_detail.html

layout:decorate="~{fragment/user_layout}"> fragment -> user_layout이랑 같이 열린다는 말이다.

<th:block layout:fragment="content">  이름을 content라고 주는 것이고,

content 안의 내용들을 user_layout의 content 라는 이름을 가진 곳에 뿌려준다는 뜻이다.

 

UserController

 

board_list.html

board_detail.html

 

위와 같이 content에 있는 html들이 내용으로, fragment에 있는 html들이 제목과 같이 나오는 것을 확인할 수 있다.

728x90
반응형

댓글