2011-01-15 3 views
6

봄 3 참조 가르쳐 : 당신이 방법 매개 변수에 배치 할 때메소드 인수 수준에서 @ModelAttribute 주석의 의미는 무엇입니까?

@ModelAttribute는 특정 주석 메소드 매개 변수

에 모델 속성을 매핑 나는이 이해가 안 돼요 마법 철자, 왜냐하면 그 모델 객체의 별칭 (반환 값으로 ModelMap을 사용하는 경우 키 값)이 요청 처리기 메소드 실행 후 View로 전달 되었기 때문입니다. 따라서 요청 핸들러 메소드가 실행될 때 모델 오브젝트의 이름은 메소드 매개 변수에 맵핑 될 수 없습니다.

이 모순을 해결하기 위해 나는 stackoverflow에 가서 this 상세한 예제를 찾았습니다. 예 저자는 말했다 :

은 "personAttribute"모델이 그것은 보인다 JSP

에서 컨트롤러에 전달 된 // 그는 봄 참조에 매료되어

...

매력을 없애기 위해 필자는 자신의 샘플 앱을 내 환경에 배치하고 MainController.saveEdit() 메서드에서 @ModelAttribute 주석을 잔인하게 자른다. 결과적으로 응용 프로그램은 변경없이 작동합니다! 그래서 결론 : @ModelAttribute 주석은 웹 폼의 필드 값을 인수의 필드로 전달하는 데 필요하지 않습니다. 그럼 나는 질문에 붙어 : @ModelAttribute 주석의 평균은 무엇입니까? 보기에서 모델 개체의 별칭을 설정하는 것이 유일한 의미 인 경우 개체를 명시 적으로 추가하는 것보다이 방법이 더 좋은 이유는 ModelMap입니까? 인수가 주석되어 있지 않은 경우 그 유형 (즉, 그것은 HttpServletRequest, ModelMap 등이 아니다), 그것은 @ModelAttribute -annotated 인수처럼 처리됩니다 특별한 의미가 없습니다 -

답변

8

점은 @ModelAttribute는 선택 사항이다.

그래서, @ModelAttribute 효과적으로 이가지 경우에 필요하다 :

  • 하는 속성의 이름을 지정하려면. @ModelAttribute이 생략되었거나 빈 문자 value 인 경우 기본 이름이 사용됩니다 (첫 문자는 십자형으로 표시되는 인수의 유형 이름).

  • 인수 유형에 특별한 의미가있는 경우. 예를 들어, 도메인 객체가 속성을 전달할 때 java.security.Principal을 전달하면 주석을 달아야합니다. 그렇지 않으면 Spring은 HttpServletRequest.getUserPrincipal()의 결과를 대신 전달합니다.

어떤 사람들은 인수의 의미를 문서화하기 위해 실제 필요없이 @ModelAttribute를 사용하는 경향이있다.

관련 문제