Thymeleaf는 Java 기반의 서버 사이드 웹 템플릿 엔진입니다. Thymeleaf에서 가장 많이 사용되는 문법은 기본 표현식, 속성, 반복문 등이 있습니다.
Thymeleaf에서 가장 기본적인 표현식은 변수 표현식(${...})과 메시지 표현식(#{...})이 있습니다.
변수 표현식: ${...}
변수의 값을 출력하거나 처리할 때 사용합니다. 예를 들어, 컨트롤러에서 모델에 추가한 값을 렌더링하는데 사용됩니다.
예시:
<p th:text="${message}">Hello, World!</p>
메시지 표현식: #{...}
다양한 언어와 지역에 맞게 어플리케이션의 텍스트와 기타 리소스를 적절히 변환된 메시지를 출력할 때 사용합니다.
예시:
<p th:text="#{greeting.message}">Hello, World!</p>
Thymeleaf에서 속성은 HTML 태그의 속성 값을 동적으로 변경할 수 있게 해주는 기능입니다. 서버에서 전달받은 값을 사용하기 위해 이용되며, 일반적으로 th:
접두사를 사용합니다.
일반 속성: th:attr
태그의 속성을 변경하거나 추가할 때 사용합니다.
예시:
<input type="text" th:attr="value=${username}" />
텍스트 속성: th:text
태그의 텍스트 내용을 변경할 때 사용합니다.
예시:
<p th:text="${greeting}">Hello, World!</p>
HTML 속성: th:utext
태그의 텍스트 내용을 HTML로 렌더링할 때 사용합니다.
예시:
<p th:utext="${htmlContent}">Hello, World!</p>
다음 예제에서는 div
태그를 사용하여 HTML 구조를 갖춘 예제로 설명하겠습니다. hello
변수의 값은 <strong>Hello World!</strong>
로 가정합니다.
th:text
의 경우:
Thymeleaf 템플릿 내의 코드:
<div th:text="${hello}">message</div>
실제 웹브라우저에 표시되는 내용:
<strong>Hello World!</strong>
th:text
를 사용하면 HTML 태그를 일반 텍스트로 처리하고, 특수 문자들이 HTML 엔티티로 변환되어 안전하게 출력됩니다. 따라서 <strong>Hello World!</strong>
가 그대로 텍스트로 출력되고, 브라우저에서는 HTML 태그로 인식하지 않습니다.
th:utext
의 경우:
Thymeleaf 템플릿 내의 코드:
<div th:utext="${hello}">message</div>
실제 웹브라우저에 표시되는 내용:
Hello World!
이 경우 th:utext
를 사용하면 HTML 태그를 그대로 처리하여 렌더링되며, 웹 브라우저에서는 HTML 요소로 출력됩니다. 따라서 <strong>Hello World!</strong>
가 HTML 요소로 출력되고, 브라우저에서는 'Hello World!' 텍스트가 볼드체로 렌더링됩니다.
정리하자면, text의 경우에는 html 태그가 적용되지 않은 상태로 태그와 문자열을 함께 출력하고, utext의 경우 html 태그가 적용된 상태로 문자열을 출력합니다.
Thymeleaf에서 반복문은 주로 리스트나 배열을 순회하며 HTML 요소를 생성할 때 사용됩니다. th:each
속성을 사용합니다.
예시:
<tr th:each="user : ${users}">
<td th:text="${user.name}">John Doe</td>
<td th:text="${user.age}">30</td>
</tr>
Thymeleaf에서 조건문은 th:if
, th:unless
를 사용하며, 다른 문법과는 다르게, else 대신 unless를 사용합니다.
예시:
<div th:if="${isAdmin}">
<p>You are an admin.</p>
</div>
<div th:unless="${isAdmin}">
<p>You are not an admin.</p>
</div>
URL 표현식: @{...}
URL을 생성하거나 처리할 때 사용합니다.
예시:
<a th:href="@{/login}">Login</