2012-03-20 6 views
6

HandlerInterceptorAdapter을 확장하는 인터셉터가 있습니다.스프링 mvc 인터셉터 addObject

ModelAndView에 개체를 추가하면 경로 변수로도 내 URL에 추가되지만 원하는 것은 아닙니다.

@Override 
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) { 
    if (null == modelAndView) { 
     return; 
    } 

    log.info("Language in postHandle: {}", LocaleContextHolder.getLocale()); 
    modelAndView.addObject("selectedLocale", LocaleContextHolder.getLocale()); 
} 

내가 컨트롤러 자체에 내 ModelAndView에 무언가를 추가하면 URL에 표시되지 않습니다.

+0

내가 ... 내가 가진 문제를 해결하는 방법 HandlerInterceptorAdapter – wvp

답변

11

내 생각에 컨트롤러가 리디렉션보기를 반환했습니다. RedirectView이 사용하는 모델에 속성을 추가하면 Spring은 URL에 속성을 추가합니다.

ModelAndView 개체를 살펴보고보기가 RedirectView인지 확인하고, 그렇다면 로캘 특성을 추가하지 마십시오.

+0

잘못된 의미되었다 리디렉션 뷰? – wvp

+0

방금 ​​말씀 드렸습니다. – skaffman

+0

하지만 로캘 속성이 필요합니까? 현재 사용하는 언어에 대한 언어 메뉴 옵션에서 다른 CSS 스타일을 사용합니다. – wvp

0

코드를 편집하고 RedirectView인지 확인했습니다. 그렇지 않은 경우 추가 모델 객체를 추가합니다.

@Override 
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) { 
    if (null == modelAndView) { 
     return; 
    } 

    log.info("Language in postHandle: {}", LocaleContextHolder.getLocale()); 

    if(!(modelAndView.getView() instanceof RedirectView)) { 
     addAdditionalModelObjects(request, modelAndView); 
    } 
    } 
0

나는

request.setAttribute("jsFiles", children); 
6

시도하는 대신이 문제를 해결하기 위해 요청의 setAttribute를 사용이

import static org.springframework.web.servlet.view.UrlBasedViewResolver.REDIRECT_URL_PREFIX; 

private boolean isRedirectView(ModelAndView mv) { 

    String viewName = mv.getViewName(); 
    if (viewName.startsWith(REDIRECT_URL_PREFIX)) { 
     return true; 
    } 

    View view = mv.getView(); 
    return (view != null && view instanceof SmartView 
      && ((SmartView) view).isRedirectView()); 
}