Item.java
ItemRepository.java
참고
타임리프
<html xmlns:th="http://www.thymeleaf.org">
속성 변경 : th:href
: th:href="@{/css/bootstrap.min.css}"
: href="value1"을 th:href="value2"의 값으로 갈아끼움
: HTML을 그대로 볼 때는 href속성이 사용되고, 뷰 템플릿을 거치면 th:href의 값이 href로 대체되면서 동적으로 변경
:대부분의 HTML 속성을 th:xxx로 변경 가능
타임리프 핵심
: th:xxx가 붙은 부분은 서버 사이드에서 렌더링 되고, 기존 것을 대체
: HTML을 파일로 직접 열었을 때는 th:xxx가 있어도 웹 브라우저는 th:속성을 알지 못하므로 무시
URL 링크 표현식 - @{...}
: th:href="@{/css/bootstrap.min.css}"
상품 등록 폼으로 이동
: 속성 변경 - th:onclick
: onclick ="location.href='addForm.html'"
: th:onclick="|location.href='@{/basic/items/add}'|" --> 리터럴 대체 문법 사용됨(문자와 표현식 + 하는 대신 | |안으로)
반복 출력 - th:Each
: <tr th: each="item : ${items}">
: <td th:text="${item.price}">1000</tr>
: 모델에 포함된 값이나, 타임리프 변수로 선언한 값 조회 가능
: 프로퍼티 접근법 사용 item.getPrice()
<td th:text="${item.price}">1000</td>
-URL 링크 간단히
th:href="@{|basic/items/${item.id}|}"
순수 HTML을 그대로 유지하면서 뷰 템플릿도 사용할 수 있는 타임리프의 특징을 네츄럴 템플릿이라 함
속성 변경 - th:action
: HTML form 에서 'action'에 값이 없으면 현재 URL에 데이터를 전송
: 상품 등록 폼의 URL과 실제 상품 등록을 처리하는 URL을 똑같이 맞추고 HTTP메서드로 두 기능을 구분한다.
--> 상품 등록 폼: GET /basic/items/add
--> 상품 처리 폼: POST /basic/items/add
ModelAttribute
@RequestParam으로 변수를 하나하나 받아서 Item을 생성하는 과정 대신 사용 가능
두가지 같이 처리
redirect
참고
PRG Post/Redirect/ GET
RedriectAttribute