[Spring] ViewResolver & 커맨드 객체
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>