쌓고 쌓다
컨트롤러 모든 메서드 Model에 값 넣기 - @ModelAttribute 본문
필요성
먼저 코드를 보자.
@Controller
@RequestMapping("/form/items")
@RequiredArgsConstructor
@Slf4j
public class FormItemController {
private final ItemRepository itemRepository;
@GetMapping
public String items(Model model) {
Map<String, String> regions = new LinkedHashMap<>();
regions.put("SEOUL", "서울");
regions.put("BUSAN", "부산");
regions.put("JEJU", "제주");
model.addAttribute("regions", regions);
return "form/items";
}
@GetMapping("/{itemId}")
public String item(@PathVariable long itemId, Model model) {
Map<String, String> regions = new LinkedHashMap<>(); // HashMap은 순서가 보장안되나 LinkedHashMap은 보장됨
regions.put("SEOUL", "서울");
regions.put("BUSAN", "부산");
regions.put("JEJU", "제주");
model.addAttribute("regions", regions);
return "form/item";
}
}
컨트롤러의 메서드에서 공통적으로 Model에 필요한 값을 모두 따로따로 넣어주고 있다.
어떤 컨트롤러에서 공통적으로 Model에 담는 값이 있다면
@ModelAttribute를 메서드에 사용하여 해당 컨트롤러의 모든 메서드에 Model.addAttribute를 적용할 수 있다.
적용
@Controller
@RequestMapping("/form/items")
@RequiredArgsConstructor
@Slf4j
public class FormItemController {
//일반적인 @ModelAttribute 기능이 아니다. 이 컨트롤러의 모든 곳에 자동으로 model.addAttribute("regions",...) 추가해줌.
@ModelAttribute("regions")
public Map<String, String> regions() {
Map<String, String> regions = new LinkedHashMap<>(); // HashMap은 순서가 보장안되나 LinkedHashMap은 보장됨
regions.put("SEOUL", "서울");
regions.put("BUSAN", "부산");
regions.put("JEJU", "제주");
return regions;
}
@GetMapping
public String items(Model model) {
//model.addAttribute("regions", regions);를 작성하지 않아도 model에서 꺼내 쓸 수 있다.
}
@GetMapping("/{itemId}")
public String item(@PathVariable long itemId, Model model) {
//model.addAttribute("regions", regions);
}
}
'프로그래밍 > spring' 카테고리의 다른 글
[스프링 부트] 게시글 상단 고정(공지사항) - 24 (0) | 2023.08.22 |
---|---|
메시지, 국제화 사용하기 (0) | 2023.08.21 |
빈 순환 참조 발생 (The dependencies of some of the beans in the application context form a cycle) (0) | 2023.08.18 |
PRG(Post-Redirect-Get) 패턴 (0) | 2023.08.15 |
[스프링 부트] 다중(멀티) 게시판으로 변경 - 23 (0) | 2023.08.14 |
Comments