[SPRING] 모델 속성을 전역으로 만드는 방법은 무엇입니까?
SPRING모델 속성을 전역으로 만드는 방법은 무엇입니까?
Spring MVC Framework를 사용하고 있으며 View의 모든 .jsp 페이지가 사용자 속성 (이름, 성별, 연령 ...)에 액세스하도록하고 싶습니다. 지금까지 모든 컨트롤러에서 Model (UI)의 addAttribute 메소드를 사용하여 현재 사용자의 속성을 View에 전달합니다. 이 작업을 한 번만 수행하고 모든 컨트롤러에서 동일한 코드를 사용하지 않는 방법이 있습니까?
해결법
-
==============================
1.다음과 같이 새 Controller 클래스에서 Spring의 @ControllerAdvice 주석을 사용할 수 있습니다.
다음과 같이 새 Controller 클래스에서 Spring의 @ControllerAdvice 주석을 사용할 수 있습니다.
@ControllerAdvice public class GlobalControllerAdvice { @ModelAttribute("user") public List<Exercice> populateUser() { User user = /* Get your user from service or security context or elsewhere */; return user; } }
"populateUser"메소드는 모든 요청에 대해 실행되며 @ModelAttribute 어노테이션이 있으므로 메소드 (사용자)의 결과가 모든 요청에 대해 모델에 저장됩니다.
사용자는 @ModelAttribute에 지정된 이름이므로 $ {user}를 사용하여 jsp에서 사용자를 사용할 수 있습니다 (예 : @ModelAttribute ( "fooBar")-> $ {fooBar})
@ControllerAdvice 어노테이션에 일부 인수를 전달하여이 글로벌 컨트롤러가 권장하는 컨트롤러를 지정할 수 있습니다. 예를 들면 다음과 같습니다.
@ControllerAdvice(assignableTypes=FooController.class,BarController.class}) or @ControllerAdvice(basePackages="foo.bar.web.admin","foo.bar.web.management"}))
-
==============================
2.사용자 속성에 관한 경우 모델 Bean을 모든보기에서 액세스 할 수있는 속성으로 세션에 바인딩 할 수 있습니다. 이 작업은 한 번만 수행하면됩니다.
사용자 속성에 관한 경우 모델 Bean을 모든보기에서 액세스 할 수있는 속성으로 세션에 바인딩 할 수 있습니다. 이 작업은 한 번만 수행하면됩니다.
또 다른 옵션은 HandlerInterceptor를 구현하고 모든 요청에 모델을 노출시키는 것입니다.
from https://stackoverflow.com/questions/33876699/how-to-make-a-model-attribute-global by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 배치는 테이블을 생성하기 위해 커스텀 데이터 소스를 사용하지 않습니다 (0) | 2019.09.14 |
---|---|
[SPRING] JNDI와 Spring을 사용하여 WildFly 10.1.0. Final ActiveMQ Artemis에 어떻게 연결합니까? (0) | 2019.09.14 |
[SPRING] 사용자 정의 Spring @Cacheable 주석 작성 (0) | 2019.09.14 |
[SPRING] Spring Boot로 Monolith JSF / Spring 애플리케이션 랩핑 (0) | 2019.09.14 |
[SPRING] DataTables 서버 쪽 페이지 매김 (0) | 2019.09.14 |