-
모델: @ModelAttribute 또 다른 사용법SPRING/스프링 MVC 2021. 7. 11. 02:57
@ModelAttribute의 다른 용법
- @RequestMapping을 사용한 핸들러 메소드의 아규먼트에 사용하기 (Parameter에 사용하는 방식 : 이전에 살펴봄)
- @Controller 또는 @ControllerAdvice (이 애노테이션은 뒤에서 다룹니다.)를 사용한 클래스에서 모델 정보를 초기화 할 때 사용한다.
- @RequestMapping과 같이 사용하면 해당 메소드에서 리턴하는 객체를 모델에 넣어 준다.
= RequestToViewNameTranslator
@Controller @SessionAttributes("event") public class SampleController2 { // 이름 Form 화면 @GetMapping("/events/form/name") public String eventsForm(Model model, HttpSession httpSession) { model.addAttribute("event",new Event()); return "/events/form-name"; } //ModelAttribute 또다른 용번 // @Controller 또는 @ControllerAdvice를 사용한 클래에스 모델 정보를 초기화할 때 사용한다. @ModelAttribute() public void categories(Model model) { model.addAttribute("categories",List.of("study", "seminar","hobby","social")); } // 아래와 같이 사용할 수도 있다. /*@ModelAttribute("categories") public List<String> categories2(Model model) { return List.of("study", "seminar","hobby","social"); } */ }
위와 같이 메소드에 @ModelAttribute를 선언하면 해당 Controller에서 초기화한 model정보를 사용할 수 있다.
즉, eventsForm 메소드에서 categories 모델 정보를 사용할 수 있다.
@ModelAttribute("categories") public List<String> categories2(Model model) { return List.of("study", "seminar","hobby","social"); }
위와 같이 List를 리턴하는 방식으로도 사용할 수 있는데 이 경우에는 @ModelAttribute에 이름을 지정해야한다.
@RequestMapping와 @ModelAttribute를 같이 사용하면 해당 메소드에서 리턴하는 객체를 모델에 넣어 준다. String이 아닌 객체를 리턴하는 경우에는 RequestToViewNameTranslator가 뷰를 찾아준다. (자주 사용되지는 않음)
@GetMapping("/events/form/name") @ModelAttribute // 생략 가능 public Event eventsFormName() { // 여기서 리턴하는 객체를 model에 담아준다. return new Event(); }
'SPRING > 스프링 MVC' 카테고리의 다른 글
예외 처리 핸들러: @ExceptionHandler (0) 2021.07.13 DataBinder: @InitBinder (0) 2021.07.11 핸들러 메소드 16부 - @ResponseBody & ResponseEntity (0) 2021.07.10 핸들러 메소드 15부: @RequestBody & HttpEntity (0) 2021.07.10 핸들러 메소드 14부 ResponseEntity 예제:) 다운로드 (0) 2021.07.10