인프런 커뮤니티 질문&답변
@ModelAttribute
작성
·
231
0
@ModelAttribute 어노테이션은
model.addAttribute을 만들어주는 것으로 알고있습니다.
이 메소드는 view에 값을 전달하는 것으로 알고있는데
"redirect:/items"로가면 items/itemList.html 이 반환되는데
이html에서 BookForm을 쓰지 않아서 @ModelAttribute을 꼭 써야 하는지 궁금합니다.
@ModelAttribute를 안쓰고 커맨드 객체로 넘기기만 해도 되는지...
퀴즈
회원 가입 시 화면 입력 데이터를 엔티티 객체 대신 별도의 Form 객체로 받는 주된 이유는 무엇일까요?
데이터베이스 성능을 최적화하기 위해서
화면 종속적인 데이터나 유효성 검증 로직을 분리하기 위해서
JPA 영속성 컨텍스트와 직접적인 관계를 맺기 위해서
코드의 자동 생성 기능을 활용하기 위해서
답변 2
1
네^^ 자세히 설명해주셔서 대략 이해가 되었습니다.
먼저 여기서는 redirect:에 대한 이해가 필요합니다.
redirect:를 해버리면 뷰 템플릿을 요청하지 않습니다. 대신에 HTTP 302를 보냅니다.
이것을 리다이렉트라고 하는데요. 이렇게 되면 웹 브라우저는 /items라는 URL로 완전히 다시 요청하게 됩니다. 실제 URL창이 변하는 것을 확인할 수 있습니다.
쉽게 이야기해서 redirect:를 사용하면 뷰 템플릿 자체를 요청하지 않습니다.
따라서 @ModelAttribute에서 model.addAttribute("form") 기능이 수행은 되지만, 뷰 템플릿을 사용하지 않으니 모델은 전혀 사용되지 않습니다.
리다이렉션이 실제 사용되는 것과 @ModelAttribute에 대한 더 자세한 내용은 다음 강의를 참고해주세요^^
감사합니다.
0
질문을 너무 막해서 죄송합니다 ㅠㅠ
updateItem메소드에서 @ModelAttribute 이 부분이
model.addAttribute("form", form); 을 알아서 만들어주는 어노테이션으로 알고있습니다.
또한 model.addAttribute("form", form); 이 코드는 view에 값을 전달하기 위해 있는 것으로 알고 있습니다.!
그러면 return 값이 redirect:/items로 가지고
/items의 returns값은
itemList인데
itemList.html을 확인해보니 form에 해당하는 속성이 없어서 궁금증이 생겼습니다...
@ModelAttribute 을 예시로 사용하신거고 사용하지 않아도 괜찮은지 아니면 꼭 써야 하는 것인지 문의 드립니다.
(만약 @ModelAttribute을 사용하지 않는다면 model.addAttribute()가 생성이 되지 않고 커맨드 객체로 값만 넘어오는 것으로 알고있습니다. 정확히 공부한 내요인지는 잘 모르겠지만...)
( 처음에 질문을 깔끔하게 못드려서 죄송합니다... )






감사합니다.