Thymeleaf 설정
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' // 타임리프 추가
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
<html lang="ko" xmlns="http://www.thymeleaf.org">
- fragment(조각)을 이용한 공통 영역 처리
<div th:insert="~{fragments/commons :: nav}"></div>
<div>
<nav>
<ul>
<li><a href="#">공지사항</a></li>
<li><a href="#">자유 게시판</a></li>
<li><a href="#">질문 게시판</a></li>
<li><a href="#">FAQ</a></li>
<li><a href="#">1:1문의</a></li>
<li><a href="/chatting">채팅</a></li>
</ul>
</nav>
</div>
타임리프 주요 문법
- <th:block>
- html 태그가 아닌 단순히 타임리프를 쓰기 위한 태그가 필요할 때 사용
- 타임리프 해석 시 다른 타임리프 수행 후 소멸
<th:block th:if="${session.loginMember == null}">
(로그인 실패 시 코드)
</th:block>
<th:block th:if="${session.loginMember != null}">
(로그인 성공 시 코드)
</th:block>
- th:replace:
다른 파일의 경로를 연결하는 속성
(경로는 template 폴더 기준으로 접두사/접미사 제외하고 작성)
<th:block th:replace="~{common/header}"></th:block>
<a th:href="@{/myPage/info}" id="nickname">[[${session.loginMember.memberNickname}]]</a>
<p th:text="${name != null} ? ${name} : '이름없음'"></p>
<p th:text="${name} ? ${name} : '이름없음'"></p>
<p th:text="${nameNothing} ? ${name} : '이름없음'"></p>
<h3 style="color: purple">2. Elvis 연산자</h3>
<p th:text="${name} ?: '이름없음'"></p>
<p th:text="${nameNothing} ?: '이름없음'"></p>
<h3 style="color: purple">3. No-Operation</h3>
<p th:text="${name} ?:_">(태그에 작성)이름없음</p>
<p th:text="${nameNothing} ?:_">(태그에 작성)이름없음</p>