Thymeleaf 시작하기, 간단한 문법
타임리프(Thymeleaf)란?
- 타임리프는 현재 스프링부트에서 밀고 있는 프레임워크이다. jps는 별도의 .jsp 포맷에 구현한다. 타임리프는 순수한 html에 타임리프 태그를 추가하여 html을 조작한다. 이러한 특징 덕분에 순수한 html파일이 동작한다. 퍼블리셔와의 협업이 가능하다.
- 그 외 스프링과의 호응이 좋아졌고 성능이 좋아졌다.
타임리프의 기본적인 형태와 반복문
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org"> ........... (1)
<head>
<meta charset="UTF-8">
<title>$Title$</title>
<style>
table{
border: 1px black solid;
}
td{
border: 1px black solid;
}
</style>
</head>
<body>
<table>
<tr>
<td>id</td>
<td>pw</td>
<td>name</td>
<td>regDate</td>
</tr>
<tr th:each="dto : ${result.dtoList}"> ........(2)
<td>[[${dto.id}]]</td>.........(3)
<td>[[${dto.pw}]]</td>
<td>[[${dto.name}]]</td>
<td>[[${#temporals.format(dto.regDate,'yyyy/MM/dd')}]]</td> ........(4)
</tr>
</table>
</body>
</html>
- (1) 타임리프를 로딩한다. th는 타임리프 기능을 호출할 때 사용한다.
- (2) HTML로서 그 형태를 완벽하게 유지한 상태에서 타임리프의 기능을 사용할 수 있다. jsp의 경우 동적으로 html을 렌더링 하기 위해
<c:if>
혹은<c:foreach>
등의 jsp 의 태그를 사용해야 한다. 타임리프는 html의 문법을 지키며 반복문을 수행한다. - (3) 태그 안에서 데이터를 호출하는 것과 태그 밖에서 호출하는 방식이 다르다. 태그 내부에서는
${}
을 쓰며 밖에서는[[]]
을 추가한[[${}]]
을 사용한다. - (4) JSP 는 사용 가능한 date api가 한정되고 조작하기 어렵다. 타임리프의 경우 자바 8에서 만들어진 LocalDateTime을 손쉽게 html로 렌더링할 수 있다.
타임리프의 리다이렉트
- 타임리프에서 redirect를 하는 방법은 아래와 같다.
<a th:href="@{/member/modify(id=${dto.id})}"><input type="button" value="modify"></a>
코드 | 설명 |
---|---|
th:href | redirect를 위한 태그 |
@{/…..} | @을 식별자로 하여 url을 작성 |
(id=${dto.id}) | GET으로의 param을 적용할 때, ?을 사용하지 않고, 소괄호를 사용 |
if문
- 타임리프에서 if문을 사용하는 방법은 아래와 같다. 아래는 페이징 기능을 구현하며 만들었다.
<ul>
<li th:if="${result.prev}">.......(1)
<a th:href="@{/member/list(page=${result.start-1})}">prev</a>
</li>
<li th:each="page: ${result.pageList}">
<a th:href="@{/member/list(page=${page})}" th:class="${result.page==page?'bold':''}">[[${page}]]</a>......(2)
</li>
<li th:if="${result.next}">
<a th:href="@{/member/list(page=${result.end+1})}">next</a>
</li>
</ul>
- (1) boolean 의 값에 따라 태그가 생성되거나 사라진다.
- (2) (1)과 달리 boolea의 결과에 의존하지 않고 태그를 유지한다. class의 값이 if문에 의하여 삽입 여부를 결정한다.