@ModelAttribute는 언제 사용할까 ?
게시판 항목에 체크박스 기능을 추가한다고 생각해보자.
crud 컨트롤러마다 체크박스의 데이터를 생성하고, model에 넣어야한다.
항목을 추가할 때마다, 데이터를 만들고 model에 넣는 코드를 작성하는 번거러움이 있다.
ex) 상세보기에서 regions 데이터를 model.addAttribute() 하는 코드
@GetMapping("/{itemId}")
public String item(@PathVariable long itemId, Model model) {
Item item = itemRepository.findById(itemId);
model.addAttribute("item", item);
// 추가
Map<String, String> regions = new LinkedHashMap<>();
regions.put("SEOUL", "서울");
regions.put("BUSAN", "부산");
regions.put("JEJU", "제주");
model.addAttribute("regions", regions);
return "form/item";
}
ex) 폼추가에서 regions 데이터를 model.addAttribute() 하는 코드
@GetMapping("/add")
public String addForm(Model model) {
model.addAttribute("item", new Item());
// 추가
Map<String, String> regions = new LinkedHashMap<>();
regions.put("SEOUL", "서울");
regions.put("BUSAN", "부산");
regions.put("JEJU", "제주");
model.addAttribute("regions", regions);
return "form/addForm";
}
상세화면 폼, 등록 폼에서 모두 regions 체크박스를 반복해서 보여주어야 하기에, 각각 컨트롤러에서 model.addAttribute()을 사용해야한다.
이런 번거러움을 덜어주는 것은 @ModelAttribute 입니다.
매 컨트롤러에 model에 넣는 코드를 추가하는 대신
@ModelAttribute("regions")
public Map<String, String> regions() {
Map<String, String> regions = new LinkedHashMap<>();
regions.put("SEOUL", "서울");
regions.put("BUSAN", "부산");
regions.put("JEJU", "제주");
return regions;
}
이렇게 별도의 메서드를 작성하면,
해당 컨트롤러를 요청할 때 regions에서 변환한 값이 자동으로 모델(model)에 담기게 된다.
model.addAttribute("regions", 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; } model.addAttribute("regions", regions); |
'Spring' 카테고리의 다른 글
HTTP 상태코드에 대해 설명해주세요. (0) | 2024.08.29 |
---|---|
[Spring] 테스트 케이스 작성 / Intellj 편한 단축키 (0) | 2024.08.10 |
[Spring] MVC 템플릿 & API 응답 (5) | 2024.08.09 |