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) 절대경로와 상대경로 다시 한번 정리