2012-03-20 10 views
6

Mam przechwytujący, który rozszerza HandlerInterceptorAdapter.Spring intercap mvc addObject

Kiedy dodaję obiekt do mojego ModelAndView, zostanie on również dodany do mojego adresu URL jako zmienna ścieżki, ale nie chcę tego.

@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()); 
} 

Kiedy dodać coś do mojego ModelAndView w samym kontrolerze, to nie pojawi się w adresie URL.

+0

myliłem ... Chciałem HandlerInterceptorAdapter – wvp

Odpowiedz

11

Podejrzewam, że kontroler zwrócił widok przekierowania. Gdy dodasz atrybuty do modelu używanego przez RedirectView, Spring przypisze atrybuty do adresu URL.

Spróbuj zajrzeć do obiektu ModelAndView, aby zobaczyć, czy widok jest RedirectView, a jeśli tak, to nie dodawaj atrybutu ustawień narodowych.

+0

Jak rozwiązać problem z widok przekierowania? – wvp

+0

Właśnie ci powiedziałem jak. – skaffman

+0

Ale potrzebuję atrybutu locale? Używam innego stylu css w opcji menu języka dla aktualnie używanego języka. – wvp

0

Edytowałem kod i dodałem czek, jeśli jest to widok przekierowania. Jeśli nie, dodam dodatkowe obiekty modelu.

@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

użyłem setAttribute na żądanie zamiast obejść ten problem

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

Spróbuj

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()); 
}