본문으로 바로가기

스프링의 @ModelAttribute 어노테이션

category 스프링 2020. 6. 15. 15:26
  • @ModelAttribute는 메소드에 선언할 경우 해당 메소드가 반환하는 객체를 Model를 통해
    뷰에 전달 된다.
    또한 @RequestMapping이 선언된 메소드보다 먼저 호출되어 커맨드 객체를 초기화하는 담당도 한다

  • @ModelAttribute이 선언된 메소드가 사용가능한 파라미터 : HttpServletRequest, Locale, @RequestParam 어노테이션 적용 파라미터, @PathVariable 어노테이션 적용 파라미터 등등

메소드에 @ModelAttribute 선언

@ModelAttribute("serverTime")
public String getServerTime(Locale locale) {
    Date date = new Date();
    DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
    return dateFormat.format(date);
}
  • "serverTIme"의 속성으로 Model객체에 리턴값을 바인딩 하여 JSP 파일에서 ${serverTime}과 같은 형태로 사용할 수 있다.

파라미터에 @ModelAttribute 선언

@RequestMapping(value="/memJoin", method=RequestMethod.POST)
public String memJoin(@ModelAttribute("mem") Member member) {
    service.memberRegister(member);
    return "memJoinOk";
}
  • 파라미터의 선언된 경우는 member 커맨드 객체의 속성값들이 자동으로 바인딩 되어 반환되는 뷰에게 뿌려지게 된다. ${mem.속성이름}과 같이 JSP 파일에서 사용될 수 있다.
이 두가지 방식을 사용하여 뷰에게 Model 객체를 전달할 수 있다.
@Controller
@RequestMapping("/member")
public class MemberController {

    @Resource(name="memService")
    MemberService service;

    @ModelAttribute("serverTime")
    public String getServerTime(Locale locale) {
        Date date = new Date();
        DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
        return dateFormat.format(date);
    }

    @RequestMapping(value="/memJoin", method=RequestMethod.POST)
    public String memJoin(@ModelAttribute("mem") Member member) {
        service.memberRegister(member);
        return "memJoinOk";
    }
}

JSP 화면

<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
    <title>memJoinOk</title>
</head>
<body>
<h1> memJoinOk</h1>
    ID : ${mem.memId} <br/>
    PW : ${mem.memPw} <br/>
    Mail : ${mem.memMail} <br/>
    Phone : ${mem.memPhone.memPhone1} - ${mem.memPhone.memPhone2} - ${mem.memPhone.memPhone3} <br/>
    <P>  The time on the server is ${serverTime}. </P>
    <a href="/mvc/resources/html/memJoin.html"> Go MemberJoin</a>
</body>
</html>

'스프링' 카테고리의 다른 글

게시글의 페이징 처리  (0) 2020.06.26
스프링의 AOP 란?  (0) 2020.06.23
AJAX란?  (0) 2020.06.15
인터셉터(Interceptor)란?  (0) 2020.06.13
DispatcherServlet 이란?  (0) 2020.06.07