Skip to Content
Go Back
안형우

안녕하세요. 14년차 풀스택 웹개발자 안형우입니다. 이 블로그에서는 WordPress, PHP, CSS, 사용성, 리눅스 서버 등 풀스택 웹개발에서 마주하는 다양한 문제 상황과 해결책, 필요한 개념들을 다룹니다. 👉 소개


작업물

📌 워드프레스, 답답한 빌더와 플러그인 대신 시원하게 커스터마징하기(강의) 2023-01-15
📌 아무도 말하지 않는 PHP의 좋은 점 2018-10-13
📌 유지보수하기 쉬운 CSS 전략(슬라이드) 2016-12-20
📌 워드프레스 테마에서 템플릿 파일 매칭 순서 2013-05-12

[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>

안녕하세요. 14년차 풀스택 웹개발자 안형우입니다. 이 블로그에서는 WordPress, PHP, CSS, 사용성, 리눅스 서버 등 풀스택 웹개발에서 마주하는 다양한 문제 상황과 해결책, 필요한 개념들을 다룹니다. 👉 소개


작업물

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다