Model 객체
MVC 모델2 방식에서 사용되는 데이터 저장 객체입니다.
Model 객체는 Controller의 데이터를 View로 전달하는데 사용됩니다.
model.addAttribute( ) 메소드로 애트리뷰트를 저장합니다.
→ JSP의 request.setAttribute( ), session.setAttribute와 같은 동작을 합니다.
//Controller
@RequestMapping(value="model")
public void model(Model model) {
model.addAttribute("idx", 23);
model.addAttribute("page", 11);
}
model.jsp 요청에 대한 request, response를 jsp로 전달합니다.
실행 화면(model.jsp)
redirect에서 attribute 전달
@RequestMapping(value="redirect")
public String redirect(Model model) {
model.addAttribute("idx", 99);
return "redirect:/";
}
결과는 return "redirect:/?idx=99"; 의 실행 결과와 동일합니다.
model은 redirect에서는 get 요청 파라미터 값으로 데이터를 전달합니다.
실행 결과
@ModelAttribute
요청 파라미터를 받아 객체를 만들고 프로퍼티에 값을 저장합니다.
객체가 model 객체에 추가되어 애트리뷰트가 자동으로 View에 전달됩니다.
int와 같은 기본 자료형의 경우에는 파라미터로 선언하더라도 기본적으로 화면까지 전달되지 않습니다.
@ModelAttribute를 사용하면 타입에 관계없이 파라미터를 Model에 담아서 전달합니다.
기본 자료형의 경우 반드시 value 속성 값을 지정해야합니다.
@RequestMapping(value="modelAttr")
public void modelAttr(@ModelAttribute(value="idx") int idx) {
}
idx 값은 model 객체로 view에 전달됩니다.
idx는 파라미터이면서 modelAttr.jsp로 전달하는 model 객체입니다.
실행 결과(modelAttr.jsp)
@RequestMapping(value="orderAttr")
public String orderAttr(@ModelAttribute(value="order") Order order) {
return "modelAttr";
}
@RequestMapping(value="orderForm2")
public void orderForm2() {
}
입력된 값을 ${@ModelAttribute의 value .프로퍼티}로 가져옵니다.
orderForm2.jsp → orderAttr.jsp → modelAttr.jsp(URL은 orderAttr)
@GetMapping
GET 방식으로 요청한 URL과 매핑합니다.
@RequestMapping(method=RequestMethod.GET)와 같습니다.
@PostMapping
POST 방식으로 요청한 URL과 매핑합니다.
@RequestMapping(method=RequestMethod.POST)와 같습니다.
@SessionAttributes
Model 객체 중 session 범위에서 사용되도록 지정합니다.
여러 개를 배열로 지정할 수 있습니다.
작성 위치는 Controller 클래스 선언 위에서 합니다.
@SessionAttribute
session에 저장된 Model 객체를 가져옵니다.
매핑 메소드에서 매개변수와 함께 작성합니다.
Controller - 로그인
@Controller
@SessionAttributes("member")
public class IndexController {
@GetMapping("/login.do")
public String login(String success, Model model) {
model.addAttribute("success", success);
return "login";
}
@PostMapping("login.do")
public String loginProc(@RequestParam Map<String,String> map, Model model) {
Member member = mapper.login(map);
String url;
if(member != null) {
model.addAttribute("member",member); //@SessiongAttributes 로 설정
model.addAttribute("success", "y");
url = "/";
}else
url = "login.do?success=n";
return "redirect:" + url;
}
@SessionAttributes("member")
→ Model 객체 중 member는 session scope 값이라는 설정입니다.
model.addAttribute("member",member);
→ 따라서 member는 session scope에 값이 저장됩니다.
로그인 과정
login.jsp에서 입력된 email과 password를 요청 파라미터로
Controller의 loginProc메소드의 매개변수 map으로 전달합니다.
매퍼 인터페이스의 login 메소드의 매개변수에 map을 대입합니다.
Controller - 회원 정보 수정
@GetMapping("/update.do")
public String update(@SessionAttribute Member member) {
return "member/MemberUpdateForm";
}
@PostMapping("/save.do")
public void save(Member member, Model model, HttpServletResponse response) throws IOException {
mapper.updateMember(member);
model.addAttribute("member",member);
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String url="./update.do"; String message="회원정보 수정되었습니다.";
out.print("<script>alert('" +message +"');location.href='"+url+"'");
out.print("</script>");
//return "redirect:update.do";
}
update( )의 매개변수 @SessionAttribute Member member
→ session에서 member의 데이터를 가져옵니다.
save에서 변경된 member로 update하고 model 객체의 애트리뷰트로 저장합니다.
out 객체는 jsp에서는 내장 객체지만, Spring에서는 선언해서 사용합니다.
'수업 일지 > Spring' 카테고리의 다른 글
67일차 - [Spring] 게시판 페이징 처리 (0) | 2022.04.13 |
---|---|
66일차 - [Spring] 파일 업로드 (0) | 2022.04.13 |
64일차 - [Spring] 서블릿/MVC 패턴 (0) | 2022.04.08 |
63일차 - [Spring] spring 트랜잭션/빌더 패턴/JUnit 테스트 케이스 (0) | 2022.04.07 |
62일차 - [Spring] mybatis-spring/dbcp (0) | 2022.04.06 |
댓글