Spring
@ModelAttribute와 model.addAttribute
kenzi
2022. 4. 8. 14:03
//request.setAttribute와 유사한 기능
//1) @이용 -- 뷰에 recEventList가 보내지는 것
@ModelAttribute("recEventList")
//recEventList는? ==> getRecommendedEventService메서드의 리턴값 recommendList
public List<Event> recommend(){
return eventService.getRecommendedEventService();
}
//getRecommendedEventService()메서드
public List<Event> getRecommendedEventService(){
List<Event> recommendList = new ArrayList<Event>();
//eventMap의 get메서드로 recommendList에 객체 넣기
recommendList.add(eventMap.get(1L));
recommendList.add(eventMap.get(2L));
//recommendList를 리턴
return recommendList;
}
//2)model.addAttribute 이용
model.addAttribute("eventList",eventList);//뷰(jsp)에서 ${eventList}에는 eventList값이
model.addAttribute("eventTypes",EventType.values()); //${eventTypes}에는 EventType.values()가 들어간다
//jsp(뷰)
<c:forEach var = "event" items = "${recEventList }">
<li><a href = "<%=request.getContextPath()%>/event/detail2?id=${event.id}">${event.name}</a>
</c:forEach>
1. MVC2의 request.setAttribute와 같이 뷰에 보내는 방법
1) model.addAttribute(이름, 값) => 이름에 값을 넣어서 보내기 -- 뷰에서 개별 이름으로 값을 일일이 받아야함
2) @ModelAttribute(이름) => 이름인 객체에 값을 넣어서 객체를 보내기 --뷰에서 이름으로 객체만 받으면 됨
2. ModelAndView 객체에
객체.addObject(이름, 값)으로 이름에 값 넣어서 설정
객체.setViewName("jsp경로")로 뷰 경로 설정
리턴 객체
@RequestMapping("/list")
public String list(Model model, SearchOption option) {//SearchOption안에 date객체가 있다
System.out.println(option);
List<Event> eventList = eventService.getOpenedEventList(option);
model.addAttribute("eventList",eventList);
model.addAttribute("eventTypes",EventType.values());
return "event/list";//뷰네임은 String으로 정하기
@RequestMapping("/list2")
public ModelAndView list2(SearchOption option) {
//ModelAndView 객체에 값과 뷰네임 모두 넣어서 ModelAndView객체 리턴
ModelAndView mv = new ModelAndView();
List<Event> eventList = eventService.getOpenedEventList(option);
mv.addObject("eventList",eventList);
mv.addObject("eventTypes",EventType.values());
mv.setViewName("event/list"); // WEB-INF/view/event/list.jsp
return mv;
}
//동일한 결과페이지를 보여줌
ModelAndView객체에 값과 뷰를 모두 넣어서 리턴하는 것으로
객체를 리턴하는 것만으로 값이 넣어진 뷰가 리턴됨
Q1) 절대경로와 상대경로 다시 한번 정리