본문 바로가기

[SPRING]

스프링 공부 4일차. 모델 생성하기

@RequestMapping 어노테이션이 적용된 파라미터나 리턴타입으로 ModelAndView, Model, Map, 커맨드 객체 등을 이용해서 모델을 뷰에 전달하게 된다. 컨트롤러가 이들 Class를 이용해서 모델을 어떻게 뷰에 전달하는지 살펴보자.

 

뷰에 전달되는 모델 데이터

@RequestMapping 메서드가 ModelAndView, Model, Map을 리턴하는 경우 이들에 담긴 모델 데이터가 뷰에 전달된다.

또한, 추가로 다음의 항목도 뷰에 함께 모델로 전달된다.

  • 커맨드 객체
  • @ModelAttribute 어노테이션이 적용된 메서드가 리턴한 객체
  • 메서드가 Model, Map, ModelMap 타입의 파라미터를 통해 설정된 모델

먼저 필요한 클래스들을 생성하고,

 

아래 코드에서는 다양한 방법으로 모델을 설정하고 있다.

 

위 코드에서는 @ModelAttribute 어노테이션이 적용된 referenceSearchTypeList() 메서드가 리턴한 모델 객체는 "searchTypeList"라는 이름으로 뷰에 전달된다.

 

@RequestMapping 어노테이션이 적용된 search()메서드는 파라미터로 커맨드 객체와 ModelMap 객체를 전달 받는다.

여기서 ModelMap 객체를 전달받을 수 있는 이유는,

main.jsp에서 form action 속성을 game.do로 지정해주었기 때문에 검색 버튼을 누르면 POST 방식으로 game.do로 매핑한 game.jsp로 선택한 값(type, query)을 넘겨주기 때문에 그런 것이다.

 

search() 메서드 내부에서는 ModelMap 타입 파라미터인 model을 이용해서 "popularQueryList"이름의 모델 객체를 뷰에 전달한다. 또한, 내부적으로 ModelAndView 타입의 mav 객체를 만든 뒤 mav를 이용해서 "searchResult"라는 이름의 모델 객체를 뷰에 전달한다.

 

이들 객체 모두는 서로 다른 방법으로 생성되었지만, DispatcherServlet은 이들 모델 객체에 저장된 모델 데이터를 모두 뷰에 전달한다. 따라서 뷰 코드에서는 다음과 같이 모델 객체를 모두 사용할 수 있게 된다.

 

 

@RequestMapping 어노테이션에서 지정한 URI('/search/main.do', '/search/game.do') 가 실행된 뷰의 모습이다.

 

검색결과로 나오는 madvirus.spring.chap06... 은 searchResult의 객체가 생성된 주소가 리턴되서 나오는 결과이다.