th:object - th:field 를 이용해서 객체를 다룰때 중복되는 부분을 줄일 수 있다.
th:object
: 커맨드 객체를 지정한다.
*{…}
: 선택변수 식 → th:object
에서 선택한 객체에 접근한다.
th:field
: html 태그의 id, name, value 속성을 자동으로 처리해준다.
(예제 - 변경 전)
<form action="item.html" th:action method="post">
<div>
<label for="itemName">상품명</label>
<input type="text" id="itemName" name="itemName"
class="form-control" placeholder="이름을 입력하세요">
</div>
</form>
(변경 후)
th:object="${item}"
를 추가한다.th:field="*{itemName}"
를 추가한다.for="xxx"
와 th:field="*{xxx}"
을 맞춰야 한다. 아래 예제에서 id 속성도 삭제할 수 있다. 그러나 id 속성을 삭제하면 IDE에서 인식하지 못해서 오류처럼 보인다. 따라서
id="itemName"
속성은 써주는 것이 마음이 편해서 그렇게 했다.
<form action="item.html" th:object="${item}" th:action method="post">
<div>
<label for="itemName">상품명</label>
<input type="text" id="itemName" th:field="*{itemName}"
class="form-control" placeholder="이름을 입력하세요">
</div>
</form>
th:object
를 사용하려면 해당 오브젝트 정보를 넘겨줘야 한다.
비어있는 오브젝트를 만들어서 model에 담아, 뷰에 전달해야 한다.
(예제 - 변경 전)
@GetMapping("/add")
public String addForm(){
return "form/addForm";
}
(변경 후)
@GetMapping("/add")
public String addForm(Model model){
model.addAttribute("item",new Item());
return "form/addForm";
}
(참고)김영한님 인프런 Spring MVC-2
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-2