Spring mvc перехватчик addObject - PullRequest
       7

Spring mvc перехватчик addObject

6 голосов
/ 20 марта 2012

У меня есть перехватчик, который расширяет 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.

Ответы [ 4 ]

11 голосов
/ 20 марта 2012

Я подозреваю, что контроллер вернул представление перенаправления. Когда вы добавляете атрибуты в модель, используемую RedirectView, Spring прикрепит атрибуты к URL.

Попробуйте заглянуть внутрь объекта ModelAndView, чтобы увидеть, является ли представление RedirectView, и если это так, не добавляйте атрибут locale.

7 голосов
/ 15 октября 2012

Попробуйте это

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());
}
1 голос
/ 22 марта 2012

Я отредактировал код и добавил проверку, является ли 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 голосов
/ 23 марта 2012

Я использовал setAttribute в запросе вместо этого, чтобы обойти эту проблему

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