앞선 포스팅에서 알아보았듯이 @Controller
클래스 안의 @RequestMapping
어노테이션이 부여된 method들은 사용자에게 응답할 View
를 생성하는 역할을 하는 즉, Controller 메소드입니다. Controller
는 Model
을 이용해 데이터를 가져오고 View
에 데이터를 넘겨 적절한 View를 생성하는 역할을 합니다.
이번 포스팅에서는 Controller
에서 사용자에게 응답할 View
를 생성할 때 Model
을 이용하여 View
에 데이터를 전달하는 방법을 알아보도록 하겠습니다.
View에 데이터 전달
1. Model 객체 사용
package com.java.ex;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
public class MyController {
(value="/myview")
public String contentView(Model model) {
model.addAttribute("value","hi");
return "myview";
}
}
우선 간단히 Controller를 생성했습니다. /myview
라는 url에 매핑되도록 하였고 특이한 점은 Model
을 매개변수로 전달받고 있습니다. 매개변수로 전달받은 model.addAttribute("key", "value");
메소드를 이용하여 view 전달할 데이터를 key, value
쌍으로하여 전달할 수 있습니다.
<%page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%= request.getAttribute("value") %>
</body>
</html>
view(jsp)
에서는 내부 객체인 request의 getAttribute("key")메소드
를 이용하여 해당 값을 사용할 수 있습니다.
2. @ModelAttribute("key") 어노테이션 사용
@ModelAttribute
어노테이션이 부여된 메소드가 리턴하는 객체를 view로 바로 넘겨 사용할 수도 있습니다. @Controller
클래스안의 매핑되는 모든 URL에게 공통적으로 넘겨주어야할 데이터가 있을 때 사용하면 좋을 것 같습니다.
public class MyController {
("value2")
public String value2() {
return "pass to view";
}
(value="/myview")
public String myview(Model model) {
model.addAttribute("value","hi");
return "myview";
}
(value="/myview2")
public String myview2() {
return "myview2";
}
}
상단에 @ModelAttribute("value2")
어노테이션이 부여된 value2()
메소드를 생성했습니다. 해당 어노테이션 안의 "value2"
가 값을 가져오는데 사용될 key
로 사용되고, value2()
메소드가 return하는 객체가 value
가 되어 view에 전달됩니다. 이 값은 해당 Controller
안에 mapping 되어있는 모든 url에 적용
됩니다.
<%page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%= request.getAttribute("value2") %>
</body>
</html>
앞서 말씀드린것처럼 @ModelAttribute("key")
어노테이션을 이용하여 넘겨진 데이터를 이용하기 위해서는 어노테이션의 괄호안에 적힌 key
값을 이용하여 사용할 수 있습니다.
myview와 myview2 모두에서 사용가능함을 볼 수 있습니다.
*View에 객체 넘기기
view에 객체를 넘겨주는 방법은 간단합니다. 앞서 설명드린 @ModelAttribute
어노테이션을 이용한 방법을 설명 드리겠습니다.
public class MyController {
("value2")
public Student value2() {
Student student = new Student(10, "jjy");
return student;
}
(value="/myview2")
public String myview2() {
return "myview2";
}
}
앞선 방법과 같이 어노테이션을 부여한 메소드를 작성합니다. 이때 return 타입은 넘겨줄 객체의 타입으로 정의합니다.
xxxxxxxxxx
<body>
<% Student student = (Student)request.getAttribute("value2"); %>
<%= student.getAge() %> <br/>
<%= student.getName() %>
</body>
</html>
view에서는 다음과 같이 <%%>
선언문안에 request.getAttribute() 메소드를 이용하여 해당 객체를 받아오면 됩니다. 중요한 점은 getAttribute()메소드는 Object 형을 반환 하기 때문에 넘겨준 객체의 형으로 캐스팅 해주어야 합니다.
객체의 데이터가 담겨 전달되었음을 볼 수 있습니다.
'FrameWork > Spring' 카테고리의 다른 글
Spring - @(Annotation) 사용시 알 수 없는 에러 (0) | 2019.04.04 |
---|---|
Spring - 사용자가 전달한 값 사용하기 - 7 (Command 객체, @RequestParam, @PathVariable) - 7 (2) | 2019.04.03 |
Spring - Spring MVC 동작과정 -5 (0) | 2019.04.03 |
Spring - AOP관련 Annotation - 4 (0) | 2019.03.29 |
Spring - Spring을 왜 사용하나요?(AOP) - 3 (2) | 2019.03.29 |