[Java Spring] Thymeleaf에서 th:fragment나 title 태그를 조건문으로 써서 인클루드하기

기본적인 맥락 설명은 건너뜁니다.

Thymeleaf layout 파일을 만들고, 해당 레이아웃을 사용하는 파일에서 sidebar 프래그먼트를 지정했다. 아래와 같은 코드다.

<th:block layout_fragment="sidebar" th_replace="fragments/sidebar-system"></th:block>

지금은 system 사이드바인데, type이 system일 때는 system 사이드바를 사용하고 싶지만, type이 app일 때는 app 사이드바를 사용하고 싶다.

그래서 아래처럼 하면 안 된다.

<th:block th_if="${type == 'system'}" 
          layout_fragment="sidebar" th_replace="fragments/sidebar-system"></th:block>
<th:block th_if="${type == 'app'}" 
          layout_fragment="sidebar" th_replace="fragments/sidebar-app"></th:block>

이유는 간단한데, if문보다 layout:fragment가 우선하기 때문이라고 한다.

해결책 – 파일은 하나만, 그 안에서 if문

해결책은 단순하다.

layout:fragment에는 파일을 하나만 지정해 주고, 그 안에서 if문을 사용한다.

<th:block layout_fragment="sidebar" th_replace="fragments/sidebar"></th:block>

위와 같이 코드를 쓰고, 아래처럼 sidebar.html 파일을 만든다.

<!DOCTYPE html>
<html xmlns_th="http://www.thymeleaf.org" th_lang="${#locale}">
<body>
    <!--/*@thymesVar id="type" type="java.lang.String"*/-->
    <th:block th_if="${type == 'system'}">
        <div class="u-padding-top" th_replace="fragments/sidebar-system"></div>
    </th:block>
    <th:block th_if="${type == 'app'}">
        <div class="u-padding-top" th_replace="fragments/sidebar-app"></div>
    </th:block>
</body>
</html>

그러면 잘 작동한다.

title 태그

title 태그도 마찬가지 방식으로 처리하면 된다.

<title th_replace="fragments/title"></title>

카테고리 글 목록 👉

대표글

댓글 남기기