본문 바로가기
Spring

Thymeleaf - layout 구조 나누기

by ghan2 2024. 5. 1.

관리자 페이지를 만들고 싶은데 기본 틀 안에서 내용 페이지만 바꿔주고 싶다.

Thymeleaf에서는 Thymeleaf Layout Dialect를 사용하여 이 작업을 수행할 수 있다고 해서 관련 내용을 알아보자!

 

 

먼저 내가 만들고 싶은 구조를 그려보자

피그마라는 프로그램을 이용하면 그릴 수 있군. 아주아주 간단하게 .. 그려보았다!

 

 

크게는 header, content, footer 형식을 가지고 헤더에서 선택한 요소에 따라 content의 내용이 바뀌게 하고 싶다. 

이 때 content는 적절한 사이드 바를 가지게 하고 싶다. 

layout을 설정할 때 큰 구조는 이렇다!

<!DOCTYPE html>
<html lang="ko"
      xmlns:th="http://www.thymeleaf.org"
      xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">

<head>
    <meta charset="UTF-8">
    <title>Admin</title>

    <meta charset="utf-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
    <link rel="stylesheet" type="text/css" href="/css/admin/admin-style.css">

    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>

</head>

<body>
<div style="width: 100%; padding: 0">
	<!-- 여기에 header 삽입 -->
    <header th:replace="fragments/admin/admin-header :: admin-fragment-header"></header>

	<!-- 여기에 본문 삽입 -->
    <div layout:fragment="admin-content" ></div>

	<!-- 여기에 footer 삽입 -->
    <footer th:replace="fragments/admin/admin-footer :: admin-fragment-footer"></footer>

</div>
</body>
</html>

 

 

이렇게 만들어진 layout에 필요한 페이지들을 생성해주면 된다. 

- admin-header.html

<header th:fragment="admin-fragment-header">
    <div class="admin-profile">
        <h1>사이트명</h1>
        <nav>
            <ul>
                <li>이름 님</li>
                <li><button>로그아웃</button></li>
            </ul>
        </nav>
    </div>
    <div class="admin-nav-bar">
        <span><a th:href="@{/admin}">공통</a></span>
        <span><a th:href="@{/admin/member}">회원</a></span>
        <span><a th:href="@{/admin/leathers}">상품</a></span>

    </div>
</header>

- admin-footer.html

<footer th:fragment="admin-fragment-footer" id="admin-footer">

    <div>
        미완성
    </div>
</footer>

- 본문내용.html

<!DOCTYPE html>
<html lang="ko"
      xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
      layout:decorate="~{layouts/admin-default}">

<!--여기가 공통업무 부분-->
<div layout:fragment="admin-content" id="layoutSidenav_content">

    <div id="layoutSidenav">

        <!-- sidebar -->
        <div th:replace="fragments/admin/admin-leathers-sidebar :: admin-fragment-leathers-sidebar"></div>

        <div class="container-fluid px-4">
            <h1 class="mt-4">관리자 페이지</h1>
            <ol class="breadcrumb mb-4">
                <li class="breadcrumb-item active">이름 님의 관리자 페이지입니다.</li>
            </ol>
        </div>
    </div>

</div>
</html>

 

 

이제 중복되는 디자인 요소를 무시하고 본문 내용만 추가하여 사용할 수 있다

'Spring' 카테고리의 다른 글

[Spring] Spring Security 동작 원리  (1) 2024.07.01
[Spring] POJO, Java Bean, Spring Bean  (0) 2024.06.01
요청 DTO의 기본 설정과 이유  (4) 2024.04.28
AWS RDS(mySql) 프리티어 생성하기  (0) 2024.04.22
[dbcp2] connection pool 설정  (0) 2024.04.18