복붙노트

[SPRING] 모델 속성을 전역으로 만드는 방법은 무엇입니까?

SPRING

모델 속성을 전역으로 만드는 방법은 무엇입니까?

Spring MVC Framework를 사용하고 있으며 View의 모든 .jsp 페이지가 사용자 속성 (이름, 성별, 연령 ...)에 액세스하도록하고 싶습니다. 지금까지 모든 컨트롤러에서 Model (UI)의 addAttribute 메소드를 사용하여 현재 사용자의 속성을 View에 전달합니다. 이 작업을 한 번만 수행하고 모든 컨트롤러에서 동일한 코드를 사용하지 않는 방법이 있습니까?

해결법

  1. ==============================

    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. ==============================

    2.사용자 속성에 관한 경우 모델 Bean을 모든보기에서 액세스 할 수있는 속성으로 세션에 바인딩 할 수 있습니다. 이 작업은 한 번만 수행하면됩니다.

    사용자 속성에 관한 경우 모델 Bean을 모든보기에서 액세스 할 수있는 속성으로 세션에 바인딩 할 수 있습니다. 이 작업은 한 번만 수행하면됩니다.

    또 다른 옵션은 HandlerInterceptor를 구현하고 모든 요청에 ​​모델을 노출시키는 것입니다.

  3. from https://stackoverflow.com/questions/33876699/how-to-make-a-model-attribute-global by cc-by-sa and MIT license