2012-03-20 10 views
6

HandlerInterceptorAdapter'u genişleten bir önleyici var.Spring mvc interceptor addObject

Ben bir nesne eklediğinizde benim ModelAndView aynı zamanda bir yol değişken olarak benim url olarak eklenen ama bunu istemiyorum.

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

ben denetleyicisi kendisi benim ModelAndView şey eklediğinizde, url görünmüyor.

+0

Ben ... ile sorunu çözmek için nasıl HandlerInterceptorAdapter – wvp

cevap

11

Şüphelendiğim, denetleyicinin bir yönlendirme görünümü döndürdüğü. RedirectView tarafından kullanılan modele nitelikler eklediğinizde, Spring özellikleri URL'ye yapıştırır.

Görünümün RedirectView olup olmadığını görmek için ModelAndView nesnesinin içine bakmayı deneyin ve eğer öyleyse, o zaman yerel niteliği eklemeyin.

+0

yanlış gerekiyordu yönlendirme görünümü – wvp

+0

Sadece size nasıl söyledim. – skaffman

+0

Ancak yerel ayar özniteliğine mi ihtiyacım var? Şu anda kullanılan dil için dil menü seçeneğimde farklı bir css stili vermek için kullanıyorum – wvp

0

Kodu düzenledim ve bir RedirectView olup olmadığını kontrol ettim. Değilse, ek model nesneleri ekleyeceğim.

@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

Ben

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

deneyin yerine bu sorunu aşmanın talep üzerine setAttribute kullanılan bu

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