강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

lulala님의 프로필 이미지
lulala

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

상품 수정

@ModelAttribute

작성

·

231

0

@ModelAttribute 어노테이션은 

model.addAttribute을 만들어주는 것으로 알고있습니다.

이 메소드는 view에 값을 전달하는 것으로 알고있는데

"redirect:/items"로가면 items/itemList.html 이 반환되는데

이html에서 BookForm을 쓰지 않아서 @ModelAttribute을 꼭 써야 하는지 궁금합니다.

@ModelAttribute를 안쓰고 커맨드 객체로 넘기기만 해도 되는지...  

퀴즈

61%나 틀려요. 한번 도전해보세요!

회원 가입 시 화면 입력 데이터를 엔티티 객체 대신 별도의 Form 객체로 받는 주된 이유는 무엇일까요?

데이터베이스 성능을 최적화하기 위해서

화면 종속적인 데이터나 유효성 검증 로직을 분리하기 위해서

JPA 영속성 컨텍스트와 직접적인 관계를 맺기 위해서

코드의 자동 생성 기능을 활용하기 위해서

답변 2

1

김영한님의 프로필 이미지
김영한
지식공유자

네^^ 자세히 설명해주셔서 대략 이해가 되었습니다.

먼저 여기서는 redirect:에 대한 이해가 필요합니다.

redirect:를 해버리면 뷰 템플릿을 요청하지 않습니다. 대신에 HTTP 302를 보냅니다.

이것을 리다이렉트라고 하는데요. 이렇게 되면 웹 브라우저는 /items라는 URL로 완전히 다시 요청하게 됩니다. 실제 URL창이 변하는 것을 확인할 수 있습니다.

쉽게 이야기해서 redirect:를 사용하면 뷰 템플릿 자체를 요청하지 않습니다.

따라서 @ModelAttribute에서 model.addAttribute("form") 기능이 수행은 되지만, 뷰 템플릿을 사용하지 않으니 모델은 전혀 사용되지 않습니다.

리다이렉션이 실제 사용되는 것과 @ModelAttribute에 대한 더 자세한 내용은 다음 강의를 참고해주세요^^

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

감사합니다.

lulala님의 프로필 이미지
lulala
질문자

감사합니다.

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 승기님

도움을 드리고 싶은데, 조금 더 구체적으로 질문을 해주시면 좋겠습니다.

예제 코드와 설명을 통해서 자세히 설명해주시겠어요?

lulala님의 프로필 이미지
lulala
질문자

질문을 너무 막해서 죄송합니다 ㅠㅠ

updateItem메소드에서 @ModelAttribute 이 부분이 

model.addAttribute("form", form); 을 알아서 만들어주는 어노테이션으로 알고있습니다.

또한 model.addAttribute("form", form); 이 코드는 view에 값을 전달하기 위해 있는 것으로 알고 있습니다.!

그러면 return 값이  redirect:/items로 가지고

/items의 returns값은 

itemList인데

itemList.html을 확인해보니 form에 해당하는 속성이 없어서 궁금증이 생겼습니다...

@ModelAttribute 을 예시로 사용하신거고 사용하지 않아도 괜찮은지 아니면 꼭 써야 하는 것인지 문의 드립니다.

(만약 @ModelAttribute을 사용하지 않는다면 model.addAttribute()가 생성이 되지 않고 커맨드 객체로 값만 넘어오는 것으로 알고있습니다. 정확히 공부한 내요인지는 잘 모르겠지만...)

( 처음에 질문을 깔끔하게 못드려서 죄송합니다... )

lulala님의 프로필 이미지
lulala

작성한 질문수

질문하기