@ModelAttribute

배세훈·2022년 1월 11일
0

Spring

목록 보기
31/38

@ModelAttribute

@ModelAttribute 선언 후 자동으로 진행되는 작업
1. @ModelAttribute 어노테이션이 붙은 객체를 자동으로 생성한다.
이 때 @ModelAttribute가 지정되는 클래스는 빈 클래스여야 한다.
그리고 getter와 setter가 명명 규칙에 맞게 만들어져 있어야 한다.

  1. 생성된 오브젝트에 HTTP로 넘어 온 값들을 자동으로 바인딩한다.

  2. @ModelAttribute 어노테이션이 붙은 객체가 자동으로 Model 객체에 추가되고 view까지 전달된다.

예시

  • URL
    http://localhost:8080/member/info?name=Gildong&age=25&seq=327

  • MemberInfo DTO

@Getter @Setter
public class MemberInfo
{
	private int seq;
    private String name;
    private int age;
}
  • Controller
@Controller
@RequestMapping("member")
public class MemberController
{
	@GetMapping(value="info")
    public void show(@RequestParam("seq") int seq, @ModelAttribute("myMember") MemberInfo info, Model model){
    	logger.info("##### info.getName() " + info.getName());
        logger.info("##### info.getAge() " + info.getAge());
    }
}
  • jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

Insert title here

회원 이름(info.getName()): ${info.name}

회원 이름(myMember.getName()): ${myMember.getName()}

현재 이름(myMember.name): ${myMember.name}

회원 번호: ${memberVO.seq}

  • 위의 코드에서는 MemberInfo 클래스의 객체 info를 자동으로 생성한다.
    이때 @ModelAttribute가 지정되는 MemberInfo 클래스는 빈 클래스여야 한다.
    getter와 setter가 명명 규칙에 맞게 만들어져 있어야 한다.

  • 생성된 오브젝트(info) HTTP로 넘어 온 값들을 자동으로 바인딩한다.
    name=Gildong&age=25&seq=327 이렇게 들어오는 name, age, seq의 값이 MemberInfo의 해당 변수의 setter를 통해서 해당 멤버 변수로 binding 된다.

  • @ModfelAttribute 어노테이션이 붙은 객체가(MemberInfo) 자동으로 Model 객체에 추가되고 따라서 MemberInfo 객체가 .jsp 뷰단까지 전달이 된다

  • MemberInfo 객체가 Model 객체에 추가될 때 @ModelAttribute()의 괄호 안에 지정한 문자열의 이름으로 추가된다.

profile
성장형 인간

0개의 댓글