2012-03-20 113 views
6

我有一个拦截器,它扩展了HandlerInterceptorAdapter弹簧mvc拦截器addObject

当我添加一个对象到我的ModelAndView它也被添加到我的网址作为路径变量,但我不想这样做。

@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 2012-03-20 11:42:41

回答

11

我怀疑是控制器已经返回了重定向视图。当您向RedirectView使用的模型添加属性时,Spring会将属性添加到URL中。

尝试查看ModelAndView对象的内部以查看该视图是否为RedirectView,如果是,则不要添加locale属性。

+0

如何解决这个问题重定向视图? – wvp 2012-03-20 11:43:24

+0

我刚才告诉你如何。 – skaffman 2012-03-20 11:43:53

+0

但我需要locale属性?我用我的语言菜单选项为当前使用的语言提供不同的css风格 – wvp 2012-03-20 11:46:59

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

我用请求的setAttribute而不是解决这个问题

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

试试这个

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