상품 관리 서비스
상품 도메인 모델
(ID, 명, 가격, 수량)
서비스 흐름
상품 관리 기능 = CRUD
타임리프 사용 선언
<html xmlns:th="http://www.thymeleaf.org">
속성 변경- th:href
th:href="@{/css/bootstrap.min.css}"
th:href
의 값으로 변경핵심
th:xxx
가 붙으면 서버사이드에서 랜더링되고, 기존것 대체th:
속성을 알지 못하므로 무시URL 링크 표현식 @{...}
th:href="@{/css/bootstrap.min.css}"
@{...}
사용 (URL링크 표현식) 리터럴 대체 |...|
타임리프에서 문자와 표현식 등은 더해서 사용해야됨
결과를 다음과 같이 만들어야 하는데
location.href='/basic/items/add'
그냥 사용하면 문자와 표현식을 각각 따로 더해서 사용해야 하므로 다음과 같이 복잡해진다.
th:onclick="'location.href=' + '\'+@{/basic/items/add} + '\''"
리터럴 대체 문법을 사용하면 다음과 같이 편리하게 사용할 수 있다.
th:onclick="|location.href='@{/basic/items/add}'|"
<button class="btn btn-primary float-end"
onclick="location.href='addForm.html'"
th:onclick="|location.href='@{/basic/items/add}'|"
type="button">상품 등록</button>
반복 출력 th:each
items
컬랙션에서 item
변수를 하나씩 꺼냄
변수 표현식 ${...}
<td th:text="${item.price}">10000</td>
item.getprice()
호출)링크 표현식2 @{...}
th:href="@{/basic/items/{itemId}(itemId=${item.id}, query='test')}"
http://localhost:8080/basic/items/1?query=test
Item 객체를 생성, 파라미터값을 프로퍼티 접근법으로 입력
그리고 Model에 @ModelAttribute("이름")
로 지정한 객체를 이름으로 자동으로 너줌
새로고침은 마지막에 서버에 전송한 데이터를 다시 전송
따라서, 새로고칠때마다 상품데이터를 계속 서버로 전송하게 됨
리다이렉트는 웹브라우저가 새로운 요청을 하는거임
상품을 저장하고, 리다이렉트를 하면, 새로고침할 때 redirect요청이 들어가기 때문에 문제 해결 가능