SPRING

SPRING Controller Model

Adev 2022. 11. 13. 00:03

: 데이터 전달자.

파라미터(request)로 데이터를 받아 추가적으로 처리한 후 결과를 View로 전달할 때 주로 사용한다.

 

파라미터를 Model 타입으로 선언하면 SpringMVC에서 자동으로 Model타입의 객체를 만들어준다.

필요한 데이터를 Model 객체에 담아주면 된다.

 

@RequestMapping가 적용된 메서드에서 controller에서 처리한 데이터를 Model 객체에 담아서 View(화면, jsp)에 전달한다.

 

ex) 

@Controller
public class GameSearchController {
	
	@ModelAttribute("searchTypeList")
	public List<SearchType> referenceSearchTypeList() {
		List<SearchType> options = new ArrayList<SearchType>();
...
		return options;
			}

    @RequestMapping("/search/game.do")
...
		ModelAndView mav = new ModelAndView("search/game");					
		SearchResult result = searchService.search(command);
		mav.addObject("searchResult", result);
		return mav;

메서드가 ModelAndView, Model, Map을 리턴하는 경우, 이들의 모델 데이터와 Command 객체(JavaBean), @ModelAttribute가 적용된 메서드가 리턴한 객체, 메서드의 Map, Model, ModelMap 타입 파라미터를 통해 설정된 모델이 View에 전달된다.

 

 

@ModelAttribute

: 파라미터를 강제로 Model에 담아서 화면으로 전달한다.

 

스프링 Controller는 Java Beans 규칙에 맞는 객체(생성자가 없거나 빈 생성자를 가지며, getter/setter를 가진 클래스의 객체)를 화면으로 전달한다.

따라서 기본 자료형 등은 그대로 파라미터로 사용하면 전달되지 않기 때문에 추가적인 처리가 필요하다.

 

@ModelAttribute를 적용한 메서드는 따로 호출하지 않아도 @RequestMapping의 메서드가 실행될 때 리턴한 객체를 모델로 View에 전달한다. 따라서 두 개 이상의 요청 처리 메서드에 공통으로 사용되는 모델 객체를 사용할 수 있다.

@RequestMapping 적용 메서드와 동일한 타입의 파라미터를 가진다.

@ModelAttribute를 사용해 Command 객체를 초기화한다.

 

ex)

	@GetMapping("/ex04")
	public String ex04(@ModelAttribute("PAGE") int page) {

	log.info("PAGE: " +page);
	
	return "/sample/ex04";

	}

 

+ RedirectAttributes

: Model과 같이 파라미터로 선언하며 addFlashAttribute(이름,값) 메소드를 이용해 일회성으로 화면에 데이터를 전달하는 용도로 사용한다.

 

리턴 시 "redirect:/"접두어를 사용한다.


cf) Servlet의 response.sendRedirect()

 

ex)

rttr.addFlashAttribute("name", "AAA");

return "redirect:/";

 

 

ModelAndView, Model, Map을 이용해 View에 전달할 모델을 생성한다.

 

 : ModelAndView, Model, Map타입을 파라미터로 전달받는다.

@RequestMapping("/search1.do")
        	public String search1(Map model){

 

 

  • ModelAndView 객체(org.springframework.web.servlet.ModelAndView Class)

 

setViewName(String viewName) 메서드로 View 이름을 설정하고, addObject(String name, Object value) 메서드로 값을 추가한다.

@RequestMapping("/search/game.do")
        	public ModelAndView search(SearchCommand command){
        		...        		
        		ModelAndView mav = new ModelAndView();
        		mav.setViewName("search/game");
        		mav.addObject("searchResult", searchResult);

 

 

  • Map과 Model의 Interface를 구현한 Class의 객체를 생성해서 리턴한다.

 

(Model은 org.springframework.ui.ExtendedModelMap Class, Map은 java.util.HashMap Class를 이용해 모델을 설정)

        	@RequestMapping("/search2.do")
        	public Model search1(Model model){
        		...
        		Model model = new ExtendedModelMap();
        		model.put("result", searchResult);
        		return model;

 

 

+ 생성자를 사용해서 View이름(+Map) 전달

Map referenceMap = referenceData();
        	return new ModelAndView("search/game",referenceMap);
return new ModelAndView("search/game","result", searchResult);

'SPRING' 카테고리의 다른 글

SPRING tiles2  (0) 2022.11.16
SPRING View 영역 구현  (0) 2022.11.14
SPRING View 지정  (0) 2022.11.12
SPRING Controller 구현  (0) 2022.11.11
SPRING MVC 구조, 처리 흐름, 개발 과정  (0) 2022.11.10