model attribute
<JSP>
<form:form method="post" modelAttribute="userRegistrationModel">
<Controller>
//Get
@RequestMapping(value="register", method=RequestMethod.GET)
public String register(Model model, UserRegistrationModel userModel)
{
model.addAttribute("departments", departmentService.findAll());
return "user/register";
}
//Post
@RequestMapping(value="register", method=RequestMethod.POST)
public String register(@Valid UserRegistrationModel userModel, BindingResult bindingResult, Model model)
{
if (bindingResult.hasErrors()) {
model.addAttribute("departments", departmentService.findAll());
return"user/register";
}
userService.save(userModel);
return "redirect:registerSuccess";
}
=> 위 상황은 회원가입 폼에서 Get/Post다.
위 코드를 실행시키면, 회원가입 폼에서 유효성 검사를 실패하게 되면 다시 회원가입 폼이 뜨는데, 이 때 실패한 입력내용과 위에 model.addAttribute("departments", departmentService.findAll()); 빼고 입력한 것들이 남아있다. 그 이유는 무엇일까?
이유는 다음과 같다.
액션 메소드 파라미터가 객체일 경우에
그 객체는 자동으로 model에 add attribute 된다.
이때 그 이름(name)은 클래스 이름에서 첫글자만 소문자.
특히 액션 메소드의 파라미터가 객체가 아니고, String 이거나 int 인 경우에는 반드시 이름을 지정해 주어야 함. 이 과정을 spring web mvc엔진이 자동적으로 해준다.
model attribute 이름
(가)
@RequestMapping(....)
public String method1(Pagination pagiation) {
}
model attribute name = pagination
예)model.addAttribute("pagination", pagination);
=>
Pagination : 클래스 이름
pagination : Pagination 타입의 변수
pagination : spring web mvc엔진이 자동으로 model에 add attribute 해줄 때, model attribute의 이름
(나)
@RequestMapping(....)
public String method1(Pagination pagiation1) {
}
model attribute name = pagination
예)model.addAttribute("pagination",pagination1);
=>
Pagination : 클래스 이름
pagination1 : Pagination 타입의 변수
pagination : spring web mvc엔진이 자동으로 model에 add attribute 해줄 때, model attribute의 이름
(다)
@RequestMapping(....)
public String method1(Pagination1 pagiation) {
}
model attribute name = pagination1
예)model.addAttribute("pagination1",pagination);
=>
Pagination1 : 클래스 이름
pagination : Pagination1 타입의 변수
pagination1 : spring web mvc엔진이 자동으로 model에 add attribute 해줄 때, model attribute의 이름
(라)
@RequestMapping(....)
Public String method1(@RequestParam("Pagination2") Pagination pagiation1) {
}
@RequestParam("model attribute의 이름")
model attribute name = Pagination2
예) model.addAttribute("Pagination2", pagination1);
=>
Pagination : 클래스 이름
pagination1 : Pagination 타입의 변수
pagination2 : spring web mvc엔진이 자동으로 model에 add attribute 해줄 때, model attribute의 이름.
@RequestParam : 객체 넘길 수 있음. 우리는 그동안 생략해왔던 것임.
@RequestParam("Pagination2") :
Spring web mvc엔진에 model에 자동으로 채워줄 때 이름을 객체의 앞만 소문자로 바꿔서 넣어준다.
하지만 종종 그 이름을 바꾸고싶을때가 있다.
그럴 때 @RequestParam("바꿔주고싶은 이름")으로 바꿔준다.
'Spring' 카테고리의 다른 글
@Setter (0) | 2019.04.18 |
---|---|
토비의 스프링3.1 - 템플릿 메소드 패턴, 팩토리 메소드 패턴 (0) | 2019.03.03 |
Spring Security + Spring MVC (0) | 2019.02.04 |
Spring Security (0) | 2019.02.03 |
spring core(핵심) 기능 (0) | 2019.01.31 |