스프링/4. 스프링 MVC-2

21. 멀티 체크박스

sdafdq 2023. 8. 27. 03:00
@ModelAttribute("regions")
public Map<String, String> regions(){
    Map<String, String> regions = new LinkedHashMap<>();

    regions.put("SEOUL", "서울");
    regions.put("BUSAN", "부산");
    regions.put("JEJU", "제주");

    return regions;
}

이렇게 아예 컨트롤러에서 함수로 @ModelAttribute 만들어 두면 모든 컨트롤러 지날 때 저게 들어간다.

이것도 좀 비효율 적이기는 함. 싱글톤같은걸로 처리하는게 좋긴 함.

참고로 LinkedHashMap은 순서가 보장됨.

 

여튼 위의 "regions"라는 이름으로 return값, regions가 들어감.

 

@Data
public class Item {

    private Long id;
    private String itemName;
    private Integer price;
    private Integer quantity;
    private Boolean open;
    private List<String> regions;
    private ItemType itemType;
    private String deliveryCode;

    public Item() {
    }
}

 

@GetMapping("/add")
public String addForm(Model model) {
    model.addAttribute("item", new Item());
    return "form/addForm";
}

빈 아이템을 생성해서 넘겨줬기 때문에.

 

 

 

<!-- 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>

regions 횟수만큼 반복.

th:field="*{regions}"인데 이거는 위에서 정해놓은 들어온 th:object="item"의 regions임.

여튼 value는 우리가 넣어준 regions로 ${region.key} 해주니 빈걸로 갔을테니 다 체크표시 해제임.

참고로 이렇게 체크박스가 여러개 일때는 id에 타임리프가 이름+숫자를 붙여줌.

regions1, regions2 ....

${#ids.prev('regions')} 이거는 id는 같아야 하기 때문에, #ids.prev('regions')는 이전의 가장 가까운 태그 중 id가 regions라는 문자를 포함하는 id를 찾아서 매칭 시켜주는거임. 그 regions라는 문자를 가진 id를 가져와서 for에다 넣어줌.

#ids 이걸로 해주면 th:field="*{regions}" 여기서 나온 id를 인식을 해서 자동으로 가져와 넣어줌. 

 

<div>
    <div>등록 지역</div>
    <div class="form-check form-check-inline">
        <input type="checkbox" value="SEOUL" class="form-check-input" id="regions1" name="regions"><input type="hidden" name="_regions" value="on"/>
        <label for="regions1" class="form-check-label">서울</label>
    </div>
    <div class="form-check form-check-inline">
        <input type="checkbox" value="BUSAN" class="form-check-input" id="regions2" name="regions"><input type="hidden" name="_regions" value="on"/>
        <label for="regions2" class="form-check-label">부산</label>
    </div>
    <div class="form-check form-check-inline">
        <input type="checkbox" value="JEJU" class="form-check-input" id="regions3" name="regions"><input type="hidden" name="_regions" value="on"/>
        <label for="regions3" class="form-check-label">제주</label>
    </div>
</div>

결과임.

 

 

 

 

 

 

 

 

 

'스프링 > 4. 스프링 MVC-2' 카테고리의 다른 글

23. 셀렉트 버튼  (0) 2023.08.27
22. 라디오버튼  (0) 2023.08.27
20. 단일 체크박스  (0) 2023.08.26
19. 기존 Item에 요구사항 추가.  (0) 2023.08.26
18. 스프링 타임리프 폼  (0) 2023.08.26