저번 포스팅에서는 클라이언트가 전달하는 값을 주입받을때 데이터 한개 한개를 받을 수 있는 여러가지 방법에 대해서 알아보았다. 그러한 파라미터 데이터는 객체로써 받을 수도 있다!
1. Map으로 주입받기
클라이언트가 전달하는 모든 파라미터 데이터를 한번에 Map을 이용하여 전달 받을 수 있다.. 단, 동일명으로 전달 되는 2개 이상의 파라미터가 있다면 하나만 담기게 된다. 동일 명으로 전달 되는 파라미터가 2개이상이라면 List를 통해서 받아야한다.... 복잡하다.
2. @ModelAttribute로 주입받기
Spring MVC에서 제공하는 @ModelAttribute에 대해서 알아보자.
@ModelAttribute를 이용하면 파라미터를 객체로 주입받을 수 있다. 전달되는 파라미터의 이름과 동일한 프로퍼티에 자동으로 주입이 된다. 이렇게 받아온 객체를 커맨드 객체(Command Object)라고 부른다. 또한, @ModelAttribute는 생략이 가능하다.
BoardVO라는 POJO클래스가 위와 같이 정의 되어있다고 가정하면, @ModelAttribute BoardVo board 의 형태로 파라미터를 받아올 수 있다(@ModelAttribute는 생략이 가능하다.) 전달되는 파라미터의 이름과 같은 프로퍼티에 자동으로 주입하기 때문에 setter를 이용해 자동으로 index, title, content값이 들어갔겠고, 위와같이 출력하면 Request한 값이 정상적으로 출력되는 것을 볼 수 있었다.
3. 커맨트객체 이용하기
2번과 같이 Request영역에서 요청한 데이터를 이용하여 빈을 주입하는 작업을 하였다. 우리는 빈을 주입만 하였지 Request영역으로 다시 저장하기 위하여 따로 저장하는 작업을 하지는 않았다. View단에서는 어떻게 이 빈 객체의 데이터를 이용할 수 있을까??
<h3> index : ${boardVO.b_index} </h3>
<h3> title : ${boardVO.b_title} </h3>
<h3> content : ${boardVO.b_content} </h3>
View에서는 위와같이 사용할 수 있다. JSP EL코드( ${} )를 사용하고, 빈 클래스 맨 앞 글자를 소문자로 바꾸고 프로퍼티 이름을 써주면 View에서 가져다가 쓸 수 있다.
View에서 가져갈 때 이름을 붙여줄 수도 있다.
public String test1(@ModelAttribute("testData") BoardVO board)
이 처럼 이름을 정해주면 ${testData.b_index}의 형태로 사용할 수 있겠다
'JAVA > Spring MVC' 카테고리의 다른 글
Redirect와 Forward (0) | 2020.04.24 |
---|---|
Form 커스텀 태그 (0) | 2020.04.24 |
ViewResolver 에게 전달하기 (0) | 2020.04.24 |
parameter 추출하기(HttpServletRequest, WebRequest ,@RequestParam, @PathVariable) (0) | 2020.04.23 |
Spring MVC xml설정하기 (0) | 2020.04.23 |