인프런 커뮤니티 질문&답변

코딩먹는하마님의 프로필 이미지
코딩먹는하마

작성한 질문수

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

체크 박스 - 멀티

regions의 컬랙션 객체

작성

·

456

·

수정됨

0

컨트롤러에서 Map 타입 region의 값을 넣어주는데

@ModelAttribute("regions")
public Map<String, String> regions() {
 Map<String, String> regions = new LinkedHashMap<>();
 regions.put("SEOUL", "서울");
 regions.put("BUSAN", "부산");
 regions.put("JEJU", "제주");
 return regions;
} 

Item 객체의 regions에는 값을 언제 넣어주는 지 궁금합니다.

@Data
public class Item {
  private List<String> regions; //등록 지역
}

 

아래 질문을 보면

https://www.inflearn.com/questions/298992/regions-%ED%95%84%EB%93%9C%EC%9D%98-%EA%B0%92%EC%9D%B4-%EC%B6%94%EA%B0%80%EB%90%98%EB%8A%94-%EB%8F%99%EC%9E%91%EB%B0%A9%EC%8B%9D%EC%9D%B4-%EA%B6%81%EA%B8%88%ED%95%A9%EB%8B%88%EB%8B%A4

스프링이 List 타입으로 선언한 regions에도 컬랙션 객체를 만들어서 자동으로 값을 넣어준다고 말씀하셨는데 하나는 Map이고 다른하나는 LIst로 서로 다른 컬랙션 객체인데 어떻게 값을 넣어 주는 지 궁금합니다.

 

정리하면 아래 addForm.html 코드에서

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

<input type="checkbox" th:field="*{regions}" th:value="${region.key}">에서

item.regions에 값을 넣어주지도 않았는데

item.regions와 region.key가 어떻게 비교할 수 있는 지 궁금합니다.

답변 1

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 코딩먹는하마님

Q1

addForm.html은 등록폼입니다. 따라서 미리 체크가 되어 있으면 안됩니다. 따라서 item.regions에도 값이 없는 것이 정상입니다.

대신에 editForm.html을 참고해보시면 item.regions에도 값이 있기 때문에 도움이 되실거에요.

 

Q2: 하나는 Map이고 다른하나는 LIst로 서로 다른 컬랙션 객체인데 어떻게 값을 넣어 주는 지 궁금합니다

List로 선언한 @ModelAttribute("regions")의 값을 통해서 th:each로 출력을 하는 것이고, item.regions에 있는 값은 checkbox의 th:field에서 비교를 해서 체크를 해야할지 말아야할지 판단하는 용도로 사용됩니다.

감사합니다.

코딩먹는하마님의 프로필 이미지
코딩먹는하마

작성한 질문수

질문하기