본문 바로가기

Spring

ModelAttribute

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 이름

spring web mvc엔진이 액션 메소드 파라미터가 객체일 경우에 자동으로 model에 add attribute 해줄 때, 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