입력 폼 처리
th:object="${item}" -> 폼에서 사용할 객체를 지정. 그러면 item에 관한 프로퍼티를 *{...}으로 적용 가능
th:field는 id, name, value 속성을 모두 다 자동으로 만들어줌
-> 검증(Validation)에서 위력
체크 박스
<input type="checkbox" id="open" name="open" class="form-check-input">
html의 체크박스는 체크시에는 on(true)으로 넘어오고 비체크시에는 아무것도 넘어오지 않는다
->
<input type="checkbox" id="open" name="open" class="form-check-input"><input type="hidden" name="_open" value="on">
-> 스프링 MVC는 히든 필드도 만들어서 해결함(스프링이 비체크시에는 false로 반환해줌)
타임리프는 히든 필드마저 생성해줌 ( 값이 참이면 내부 비교로직으로 checked까지 넣어줌 )
<input type="checkbox" id="open" th:field="${item.open}" class="form-check-input">
체크 박스 - 멀티
@ModelAttribute의 또다른 기능
-> 아래처럼 쓰면 모든 뷰에서 모델에 regions가 넘어간다
@ModelAttribute("regions")
public Map<String, String> regions(){
Map<String, String> regions = new LinkedHashMap<>();
regions.put("SEOUL", "서울");
regions.put("BUSAN", "부산");
regions.put("JEJU", "제주");
return regions;
}
th:filed는 반복문일때 아이디도 다르게 만들어줌(regions1, regions2)
<div th:each="region : ${regions}" class="form-check form-check-inline">
<input type="checkbox" th:field="${item.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>
th:for="${#ids.prev('regions')}"
-> 동적으로 생성되는 id 값을 사용할수 있음
라디오 버튼
마찬가지로 @ModelAttribute를 사용해서 model에 자동으로 넣기
@ModelAttribute("itemTypes")
public ItemType[] itemTypes(){
return ItemType.values();
}
ItemType.values() -> 배열을 리턴함
<div>
<div>상품 종류</div>
<div th:each="type : ${itemTypes}" class="form-check form-check-inline">
<input type="radio" th:field="${item.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>
셀렉트 박스
마찬가지로 @ModelAttribute를 사용해서 model에 자동으로 넣기
@ModelAttribute("deliveryCodes")
public List<DeliveryCode> deliveryCodes(){
List<DeliveryCode> deliveryCodes = new ArrayList<>();
deliveryCodes.add(new DeliveryCode("FAST", "빠른 배송"));
deliveryCodes.add(new DeliveryCode("NORMAL", "일반 배송"));
deliveryCodes.add(new DeliveryCode("SLOW", "느린 배송"));
return deliveryCodes;
}
<div>
<div>배송 방식</div>
<select th:field="${item.deliveryCode}" class="form-select" >
<option value="">==배송 방식 선택==</option>
<option th:each="deliveryCode : ${deliveryCodes}" th:value="${deliveryCode.code}"
th:text="${deliveryCode.displayName}">FAST</option>
</select>
</div>
'웹 프로그래밍 > 프론트 엔드' 카테고리의 다른 글
Thymeleaf(타임리프) 기본 (0) | 2023.04.11 |
---|---|
Thymeleaf(타임리프) 기초 (0) | 2023.04.11 |
JavaScript 기초 (0) | 2023.04.02 |
CSS 기초 (0) | 2023.04.02 |
HTML 기초 (0) | 2023.04.01 |