【问题标题】:Spring mvc interceptor addObjectSpring mvc 拦截器 addObject
【发布时间】:2012-03-20 11:37:25
【问题描述】:

我有一个扩展 HandlerInterceptorAdapter 的拦截器。

当我将一个对象添加到我的 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 中。

【问题讨论】:

  • 我错了...我的意思是 HandlerInterceptorAdapter

标签: spring-mvc interceptor


【解决方案1】:

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

尝试查看ModelAndView 对象内部,查看视图是否为RedirectView,如果是,则不要添加语言环境属性。

【讨论】:

  • 但我需要语言环境属性?我习惯在我的语言菜单选项中为当前使用的语言提供不同的 css 样式
  • @Villem:你不理解我。仅添加属性 if 视图不是RedirectView。转发到 JSP 不是重定向,这就是您需要该属性的地方。
  • 在哪里描述了 RecirectView 的这种行为?我认为它的 Javadoc 应该更新。
【解决方案2】:

试试这个

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

【讨论】:

    【解决方案3】:

    我已经编辑了代码并添加了一个检查是否是 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);
        }
      }
    

    【讨论】:

      【解决方案4】:

      我在请求中使用了 setAttribute 来解决这个问题

      request.setAttribute("jsFiles", children);
      

      【讨论】:

        猜你喜欢
        • 2014-05-19
        • 2013-06-21
        • 2013-05-19
        • 2023-03-17
        • 2011-12-24
        • 1970-01-01
        • 2018-08-09
        • 2015-02-23
        • 2023-03-18
        相关资源
        最近更新 更多