스프링 웹 MVC-26.모델 @ModelAttribute


모델: @ModelAttribute 또 다른 사용법

@ModelAttribute의 다른 용법

  • @RequestMapping을 사용한 핸들러 메소드의 아규먼트에 사용하기
  • @Controller 또는 @ControllerAdvice(뒤에서 포스팅)를 사용한 클래스에서 모델 정보를 초기화 할 때 사용한다.
  • @RequestMapping과 같이 사용하면 해당 메소드에서 리턴하는 객체를 모델에 넣어 준다.
    • RequestToViewNameTranslator

@ModelAttribute 메소드

    @ModelAttribute
    public void categories(Model model){
        model.addAttribute("categories", com.sun.tools.javac.util.List.of("study", "seminar", "hobby"));
    }
    
    /*
    @ModelAttribute
    public List<String> categories(Model model) {
        return List.of("study", "seminar", "hobby")
    }
    */
    @Test
    public void getEvents() throws Exception{
        Event newEvent = new Event();
        newEvent.setName("my name is jaeuk");
        newEvent.setAge(27);

        mockMvc.perform(get("/events/list")
                .sessionAttr("visitTime", LocalDateTime.now())
                .flashAttr("newEvent", newEvent))
                    .andDo(print()) // model도 같이 출력됨
                    .andExpect(status().isOk())
                    // 모델 체크
                    .andExpect(model().attributeExists("categories")); 
    }

또 다른 방법

    @GetMapping("/events/form/name")
    public String eventsFormName(Model model){
        model.addAttribute("event", new Event());
        return "events/form-name";
    }

이 소스는 같은 소스다.

    @GetMapping("/events/form/name")
    // @ModelAttribute // 리턴하는 객체를 자동으로 모델에 담아준다. (생략가능)
    public Event eventsFormName(Model model){
        return new Event();
        // 그럼 뷰 이름은? RequestToViewNameTranslator-요청의 이름과 일치하는 뷰를 찾아준다. (부정확하다, 잘 안씀)
    }





© 2019. by jaeuk