커맨드 객체(Command Object) == Java Bean
SPRING MVC는 HTML 폼에 입력한 데이터를 자바빈 객체를 이용해서 전달받을 수 있다. 예를 들어 아래의 코드와 같이 HTML폼의 항목 이름과 자바빈 클래스의 프로퍼티의 이름이 일치할 경우 폼에 입력한 값을 해당 자바빈 클래스의 프로퍼티값으로 설정해주는 기능을 제공한다.
<form method="post">
<input type="hidden" name="parentId" value="0" />
제목 : <input type="text" name="title" /> <br/>
내용 : <textarea name="content"></textarea><br/>
<input type="submit"/>
</form>
||
입력 항목의 이름과 일치하는 프로퍼티에 값이 저장
||
public class NewArticleCommand {
private String title;
private String content;
private int parentId;
+ Get과 Set메서드
HTML 폼과 자바빈 클래스를 매핑하고, @RequestMapping 어노테이션(Annotation)이 적용된 메서드의 파라미터로 자바빈 타입을 추가해주기만 하면 된다. 예를 들어, 폼에 입력한 값을 NewArticleController 클래스에 전달 받고 싶다면 다음과 같이 요청 처리 메서드에 NewArticleCommand 타입의 파라미터를 추가해준다.
@Controller
@RequestMapping("/article/newArticle.do")
public class NewArticleController {
@RequestMapping(method = "RequestMethod.POST")
public String submit(NewArticleCommand command) {
//command.getTitle() : title 파라미터 값 저장
//command.getContent() : content 파라미터 값 저장
//command.getParentId() : parentId 파라미터 값 저장
return "article/newArticleSubmitted";
뷰 코드에서는 컨트롤러의 @RequestMapping Annotation 메서드에서 전달받은 커맨드 객체에 접근할 수 있다. 위 코드와 같이 submit()메서드가 NewArticleCommand 타입의 커맨드 객체를 전달 받았다.
이 경우 컨트롤러의 처리 결과를 보여주는 뷰 코드에서는 커맨드 객체의 클래스 이름을 이용해서 커맨드 객체에 접근할 수 있다. 즉, 커맨드 객체는 모델에 자동으로 추가된다. 단, 클래스 이름의 첫 글자는 소문자이다.
...
<body>
${newArticleCommand.title}
뷰에서 사용할 모델의 이름을 변경하고 싶다면, @ModelAttribute Annotation을 이용할 수 있다.
@Controller
@RequestMapping("/article/newArticle.do")
public class NewArticleController {
@RequestMapping(method = "RequestMethod.POST")
public String submit(@ModelAttribute("command") NewArticleCommand command) {
articleService.writeArticle(command);
return "article/newArticleSubmitted";
}
}
@ModelAttribute Annotation을 이용해서 커맨드 객체의 모델 이름을 지정했다면, 뷰 코드에서는 다음과 같이 지정한 모델 이름을 사용해서 커맨드 객체에 접근할 수 있다.
${command.title}
'[SPRING]' 카테고리의 다른 글
Spring classpath 경로확인과 경로 지정하기 (0) | 2021.09.05 |
---|---|
스프링 공부 4일차. 모델 생성하기 (0) | 2021.08.30 |
스프링 공부 3일차. 컨트롤러 메서드의 리턴 타입 (0) | 2021.08.27 |
SPRING의 MVC (0) | 2021.08.23 |