티스토리 뷰
반응형
너무 쉬운건 제외하고, 알면 편한 기본적인 타임리프 문법을 정리한다.
# th:if (조건문)
<div th:if="${loginResult}==false" class="alert alert-danger d-flex align-items-center" role="alert">
<svg class="bi flex-shrink-0 me-2" width="24" height="24" role="img" aria-label="Danger:"><use xlink:href="#exclamation-triangle-fill"/></svg>
비밀번호가 틀립니다.
</div>
조건문이 참일경우만 해당 태그가 작동한다.
# th:each (반복문)
<tbody>
<tr th:each="e: ${eList}">
<td th:text="${e.id}"></td>
<td th:text="${e.name}"></td>
<td th:text="${e.phone}"></td>
<td th:text="${e.travelType}"></td>
<td th:text="${e.departDate}"></td>
<td th:text="${e.arrivalDate}"></td>
<td th:text="${e.departPlace}"></td>
<td th:text="${e.arrivalPlace}"></td>
<td th:text="${e.vehicleType}"></td>
<td th:text="${e.createdDate}"></td>
</tr>
</tbody>
eList는 model로 내려진 iterable한 객체이다.
# th:href, @{}
<a th:href="@{/admin/main(page=0)}"></a>
<a th:href="@{/admin/main(page=${start - maxPage})}"></a>
링크식에 쿼리 파라미터는 이렇게 넣으면 된다.
# th:with (지역 변수 선언)
<ul class="pagination" th:with="start=${(eList.number/maxPage)*maxPage + 1}, end=(${(eList.totalPages == 0) ? 1 : (start + (maxPage - 1) < eList.totalPages ? start + (maxPage - 1) : eList.totalPages)})">
# input form에서 POST로 넘긴 데이터 받는법 (하나)
- method="POST"로 무조건 대문자로 해준다
- 넘길 데이터의 이름은 name="식별자" 로 넘긴다
- 컨트롤러에서는 @RequestParam("식별자") 로 받는다
# input form에서 POST로 넘긴 데이터 받는법 (여러개=객체)
- th:object="${넘길 객체 이름}" 으로 form 태그 내부에 데이터를 담아서 넘길 DTO 객체를 명시한다. (이때, 해당 HTML을 렌더링할때 model로 해당 DTO 껍데기를 내려줘야함)
- th:field="*{매핑할 멤버변수}" 로 각 데이터들을 매핑해준다.
- 컨트롤러에서는 @ModelAttribute("이름") DTO객체로 받는다.
# 서버를 배포할 때는 정적 이미지 src 경로는 반드시 타임리프 문법으로 가져온다.
<img th:src="@{/image/logo.png}">
안 그러면 깨진다.
반응형