Thymeleaf는 다양한 표현식을 통해 데이터 바인딩을 지원한다. 이를 통해 컨트롤러에서 전달된 데이터를 HTML 태그에 쉽게 삽입할 수 있다.
주요 표현식:
<!-- @Controller 에서 "data"라는 모델 데이터를 전달받았을 때-->
<h1>컨텐츠에 데이터 출력하기</h1>
<ul>
<li>th:text 사용 -> <span th:text="${data}"></span></li>
<li>컨텐츠 안에서 직접 출력하기 = [[${data}]]</li>
</ul>
> (gt), < (lt), >= (ge), <= (le), ! (not), == (eq), != (neq,ne)
<!-- @Controller 에서 "data", "nullData"라는 모델 데이터를 전달받았을 때-->
<h1>연산</h1>
<ul>
<li> 산술 연산
<ul>
<li> 10 + 2 = <span th:text="10 + 2"></span></li>
<li> 10 % 2 == 0 = <span th:text="10 % 2 == 0"></span></li>
</ul>
</li>
<li> 비교 연산
<ul>
<li> 10 > 2 = <span th:text="10 > 2"></span></li>
<li> 10 <= 2 = <span th:text="10 le 2"></span></li>
<li> 10 != 2 = <span th:text="10 neq 2"></span></li>
</ul>
</li>
<li> 조건식
<ul>
<li> (10 % 2 == 0)? '짝수' : '홀수' = <span th:text="(10 % 2 == 0)? '짝수' : '홀수'"></span></li>
</ul>
</li>
<li> Elvis 연산자
<!-- 조건식의 축약 버전 -->
<ul>
<li> ${data} ?: '데이터가 없습니다.' = <span th:text="${data} ?: '데이터가 없습니다.'"></span></li>
<li> ${nullData} ?: '데이터가 없습니다.' = <span th:text="${nullData} ?: '데이터가 없습니다.'"></span></li>
</ul>
<ul>
<li> ${data} ?: _ = <span th:text="${data} ?: _">데이터가 없습니다.</span></li>
<li> ${nullData} ?: _ = <span th:text="${nullData} ?: _">데이터가 없습니다.</span></li>
</ul>
</li>
</ul>
<!-- @Controller 에서 "users"라는 list 타입의 모델 데이터를 전달받았을 때-->
<h1>반복 상태 유지</h1>
<table border="2">
<tr>
<th>count</th>
<th>username</th>
<th>age</th>
<th>etc</th>
</tr>
<tr th:each="user, userStat : ${users}">
<td th:text="${userStat.count}"></td>
<td th:text="${user.username}"></td>
<td th:text="${user.age}"></td>
<td>
index = <span th:text="${userStat.index}"></span>,
size = <span th:text="${userStat.size}"></span>,
even = <span th:text="${userStat.even}"></span>,
odd = <span th:text="${userStat.odd}"></span>,
last = <span th:text="${userStat.last}"></span>,
first = <span th:text="${userStat.first}"></span>,
current = <span th:text="${userStat.current}"></span>
</td>
</tr>
</table>
<th:block th:each="user : ${users}">
<div>
사용자 이름1
<span th:text="${user.username}"></span>
사용자 나이1
<span th:text="${user.age}"></span>
</div>
<div>
요약 <span th:text="${user.username} + '/' + ${user.age}"></span>
</div>
</th:block>
<!-- 각 URL부분과 그 링크 경로 -->
<h1>URL 동적 표현식</h1>
<ul>
<li><a th:href="@{/hello}">basic url</a></li>
<!-- http://localhost:9090/hello -->
<li><a th:href="@{/hello(param1=${param1}, param2=${param2})}">query param</a></li>
<!-- http://localhost:9090/hello?param1=data1¶m2=data2 -->
<li><a th:href="@{/hello/{param1}/{param2}(param1=${param1}, param2=${param2})}">path variable</a></li>
<!-- http://localhost:9090/hello/data1/data2 -->
<li><a th:href="@{/hello/{param1}(param1=${param1}, param2=${param2})}">path variable + query param</a></li>
<!-- http://localhost:9090/hello/data1?param2=data2 -->
</ul>