ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 모델: @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();
     }

     

Designed by Tistory.