스프링 웹 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-요청의 이름과 일치하는 뷰를 찾아준다. (부정확하다, 잘 안씀)
}