뷰페이지 구조를 잡기 위해서는 먼저 레이아웃을 설정해야 합니다.
Thymeleaf
에는 Dialect
라는 간편한 라이브러리가 있습니다.
레이아웃을 사용하기 위해 라이브러리를 추가해 줍니다.
dependencies { implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect' }
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>nz.net.ultraq.thymeleaf</groupId> <artifactId>thymeleaf-layout-dialect</artifactId> </dependency>
웹페이지에서 공통으로 사용 할 레이아웃 페이지를 구성합니다.
최근 대부분의 뷰템플릿에서는 비슷한 구조를 제공합니다.
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"> <head> <title>Layout page</title> <script src="common-script.js"></script> </head> <body> <header> <h1>My website</h1> </header> <section layout:fragment="content"> <p>Page content goes here</p> </section> </body> </html>
개별 페이지의 layout:decorate
에 작성한 레이아웃 경로를 지정해 주면 됩니다.
<!DOCTYPE html> <html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout.html}"> <head> <title>Content page</title> <script src="content-script.js"></script> </head> <body> <section layout:fragment="content"> <p>This is a paragraph from the content page</p> </section> </body> </html>
그럼 아래와 같이 합쳐진 결과 값을 얻을 수 있습니다.
<!DOCTYPE html> <html> <head> <title>Content page</title> <script src="common-script.js"></script> <script src="content-script.js"></script> </head> <body> <header> <h1>My website</h1> </header> <section> <p>This is a paragraph from the content page</p> </section> </body> </html>
추가로 공통 파일을 별도로 작성해서 불러올 수도 있습니다.
footer를 예제로 보겠습니다.
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"> <head> <title>Layout page</title> <script src="common-script.js"></script> </head> <body> <header> <h1>My website</h1> </header> <section layout:fragment="content"> <p>Page content goes here</p> </section> <footer th:replace="fragments/footer :: footer"></footer> </body> </html>
footer.html
파일에 th:fragment
를 지정하면 됩니다.
보통 공통 파일은 fragments
폴더에 저장합니다.
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <footer th:fragment="footer"> <p>Footer</p> </footer> </html>