[개발] - Spring/Thymeleaf
Thymeleaf 통합 (3) 체크 박스 - 단일 (2)
완벽한 장면
2023. 12. 3. 12:11
체크 박스 - 단일 02
타임리프
개발할 때 마다 이렇게 히든 필드를 추가하는 것은 상당히 번거롭다.
타임리프가 제공하는 폼 기능을 사용하면 이런 부분을 자동으로 처리할 수 있다.
체크 박스 코드 추가
addForm.html
<!-- single checkbox -->
<div>판매 여부</div>
<div>
<div class="form-check">
<input type="checkbox" id="open" th:field="${item.open}" class="form-check-input">
<label for="open" class="form-check-label">판매 오픈</label>
</div>
</div>
이렇게 쓰거나
<!-- single checkbox -->
<div>판매 여부</div>
<div>
<div class="form-check">
<input type="checkbox" id="open" th:field="*{open}" class="form-check-input">
<label for="open" class="form-check-label">판매 오픈</label>
</div>
</div>
이렇게 쓴다.
실행해서 페이지 소스 보기 눌러보면
타임리프 체크 박스 HTML 생성 결과
item.open도 true로 나온다.
반대로 체크 하지 않고 등록해서 확인해보면
item.open = false 나오는 것을 확인할 수 있음.
상품 상세에 적용
item.html
체크하고 등록한 경우
체크 없이 등록한 경우
주의
: item.html 에는 th:object 를 사용하지 않았기 때문에 th:field 부분에 ${item.open} 으로 적어주어야 한다.
disabled 를 사용해서 상품 상세에서는 체크 박스가 선택되지 않도록 했다.
타임리프의 체크 확인
수정도 수정
editForm.html
<!-- 추가 -->
<!-- single checkbox -->
<div>판매 여부</div>
<div>
<div class="form-check">
<input type="checkbox" id="open" th:field="*{open}" class="form-check-input">
<label for="open" class="form-check-label">판매 오픈</label>
</div>
</div>
그런데 실행해보면 체크 박스를 수정해도 반영이 안 된다.
실제 반영되게 하려면 뭔가 작업을 하나 더 해야 한다는 이야기
ItemRepository - update() 코드를 다음과 같이 수정
public void update(Long itemId, Item item) {
Item findItem = findById(itemId);
findItem.setItemName(item.getItemName());
findItem.setPrice(item.getPrice());
findItem.setQuantity(item.getQuantity());
findItem.setOpen(item.getOpen());
findItem.setRegions(item.getRegions());
findItem.setItemType(item.getItemType());
findItem.setDeliveryCode(item.getDeliveryCode());
}
이제 실행해보면
등...
728x90
반응형