타임리프는 스프링 없이도 동작하지만, 스프링과 통합을 위한 다양한 기능을 편리하게 제공
th:object="${item}"
: <form>
에서 사용할 객체를 지정th:field="*{itemName}"
th:field="${item.itemName}"
== th:object="${item}"
, th:field="*{itemName}"
th:object 사용 이전
<form action="item.html" th:action method="post">
<div>
<label for="id">상품 ID</label>
<input type="text" id="id" name="id" th:value="${item.id}" class="form-control" readonly>
</div>
</form>
th:object 사용 이후
<form action="item.html" th:action th:object="${item}" method="post">
<div>
<label for="id">상품 ID</label>
<input type="text" id="id" th:field="*{id}" class="form-control" readonly>
</div>
</form>
단순 html 체크 박스
<div class="form-check">
<input type="checkbox" id="open" name="open" class="form-check-input">
<label for="open" class="form-check-label">판매 오픈</label>
</div>
문제 해결
<input type="checkbox" id="open" name="open" class="form-check-input">
<input type="hidden" name="_open" value="on"/> <!-- 히든 필드 추가 -->
<div> <div class="form-check">
<input type="checkbox" id="open" th:field="*{open}" class="form-checkinput">
<label for="open" class="form-check-label">판매 오픈</label>
</div>
</div>
<input type="hidden" name="_open" value="on"/>
@ModelAttribute("regions")
public Map<String,String> regions(){
Map<String, String> regions= new LinkedHashMap<>();
// HashMap은 순서가 보장이 되지 않기 때문에 LinkedHashMap을 쓰면 순서대로 들어감
regions.put("SEOUL","서울");
regions.put("BUSAN","부산");
regions.put("JEJU","제주");
return regions;
}
<!-- multi checkbox -->
<div>
<div>등록 지역</div>
<div th:each="region : ${regions}" class="form-check form-check-inline">
<input type="checkbox" th:field="*{regions}" th:value="${region.key}"
class="form-check-input">
<label th:for="${#ids.prev('regions')}"
th:text="${region.value}" class="form-check-label">서울</label> </div>
</div>
<label for="id 값">
으로 label의 대상이 되는 id 값을 임의로 지정하면 안됨 <!-- radio button -->
<div>
<div>상품 종류</div>
<div th:each="type : ${itemTypes}" class="form-check form-check-inline">
<input type="radio" th:field="*{itemType}" th:value="${type.name()}"class="form-check-input">
<label th:for="${#ids.prev('itemType')}" th:text="${type.description}"
class="form-check-label">
BOOK
</label>
</div>
</div>
<!-- SELECT -->
<div>
<div>배송 방식</div>
<select th:field="*{deliveryCode}" class="form-select">
<option value="">==배송 방식 선택==</option>
<option th:each="deliveryCode : ${deliveryCodes}" th:value="${deliveryCode.code}"
th:text="${deliveryCode.displayName}">FAST</option>
</select>
</div>
<select>
태그를 사용<option>
은 기본 옵션(아무것도 선택하지 않았을 때), 그 아래는 옵션을 여러개 생성해야함th:field="*{deliveryCode}"
와 th:value="${deliveryCode.code}"
를 타임리프가 비교해서 값이 같으면 selected="selected" 속성 추가