프로그래밍/Spring

[Spring] ViewResolver & 커맨드 객체

cho____sh 2020. 4. 1. 19:12
728x90

ViewResolver

View Resolver : Controller에서 전달 받은 jsp의 이름을 토대로 jsp를 찾아 선택하고, 전달받은 데이터를 분석해 응답 결과를 만들어낸다.

 

view의 이름 지정법과 데이터 전달하는 방법으로 여러가지가 있다.

1.HttpServletRequest 객체를 이용해 전달.

@GetMapping("/test2")

       public String test2(HttpServletRequest request) {

             request.setAttribute("data1", 100);

             request.setAttribute("data2", 200);

            

             return "test2";

       }

2. Model 객체를 이용해서 전달

@GetMapping("/test3")

       public String test3(Model model) {

             model.addAttribute("data1", 100);

             model.addAttribute("data2", 200);

            

             return "test3";           

       }

3. ModelAndView 객체를 이용해서 전달

@GetMapping("/test4")

       public ModelAndView test4(ModelAndView mv) {

             mv.addObject("data1",500);

             mv.addObject("data2",600);

             mv.setViewName("test4");

             return mv;         

       }

 

커맨드 객체

클라이언트가 전달해주는 파라미터 데이터를 주입받기 위해 사용하는 객체

@PostMapping("/test1")

       public String test1(@ModelAttribute DataBean bean) {

             System.out.println(bean.getData1() + " " + bean.getData2());  

             return "test1";

       }

(@ModelAttribute 생략 가능)

 

커맨드 객체는 자동으로 HttpServletRequest 객체에 저장되어 JSP로 전달된다.

전달한 데이터를 view에서 사용하려면 아래와 같이 사용해야한다.

       <h3>data1 : ${requestScope.dataBean.data1 }</h3>

requestScope다음의 영역은 클래스의 첫글자를 소문자로하면 된다. 그 다음 멤버 변수 이름은 그대로 사용 가능하다.

 

requestScope다음의 영역 이름을 바꾸고 싶으면 아래와 같이 바꾸면 된다.

 

@PostMapping("/test2")

       public String test2(@ModelAttribute("testData") DataBean bean) {          

             return "test2";

       }

       그럼 다음과 같이 view에서 사용할 수 있다.

       <h3>data1 : ${requestScope.testData.data1 }</h3>

728x90