2012-03-20 29 views
6

Tengo un interceptor que extiende el HandlerInterceptorAdapter.Interceptor mvc Spring addObject

Cuando agrego un objeto a mi ModelAndView también se agrega a mi url como una variable de ruta, pero no quiero eso.

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

Al agregar algo a mi ModelAndView en el propio controlador, que no aparece en la URL.

+0

que estaba mal ... Me refería HandlerInterceptorAdapter – wvp

Respuesta

11

Mi sospecha es que el controlador ha devuelto una vista de redirección. Cuando agrega atributos al modelo utilizado por RedirectView, Spring ajustará los atributos en la URL.

Intente buscar dentro del objeto ModelAndView para ver si la vista es RedirectView, y si es así, no agregue el atributo de configuración regional.

+0

¿Cómo resolver el problema una vista de redirección? – wvp

+0

Te acabo de decir cómo. – skaffman

+0

Pero necesito el atributo de configuración regional? Utilizo para dar un estilo de CSS diferente en la opción de menú de mi idioma para el idioma actualmente usado – wvp

0

He editado el código y he agregado un cheque si es un RedirectView. Si no es así, agregaré los objetos modelo adicionales.

@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

que utilizan setAttribute sobre la solicitud en lugar de solucionar este problema

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

Prueba este

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