기본적인 맥락 설명은 건너뜁니다.
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>
댓글 남기기