2012-03-20 9 views
6

Ho un intercettore che estende la HandlerInterceptorAdapter.Spring MVC intercettore addObject

Quando aggiungo un oggetto al mio ModelAndView viene aggiunto anche al mio url come variabile di percorso ma non lo voglio.

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

Quando aggiungo qualcosa alla mia ModelAndView nel controller stesso, non appare nel URL.

+0

mi sono sbagliato ... volevo dire HandlerInterceptorAdapter – wvp

risposta

11

Il mio sospetto è che il controller ha restituito la vista di reindirizzamento. Quando aggiungi attributi al modello utilizzato da RedirectView, Spring applicherà gli attributi all'URL.

Provare a cercare all'interno dell'oggetto ModelAndView per vedere se la vista è un RedirectView e, in tal caso, non aggiungere l'attributo di locale.

+0

Come risolvere il problema con una vista di reindirizzamento? – wvp

+0

Ti ho appena detto come. – skaffman

+0

Ma ho bisogno dell'attributo locale? Io uso per dare uno stile css diverso nella mia opzione di menu lingua per la lingua correntemente usata – wvp

0

Ho modificato il codice e ha aggiunto un controllo se l'è un RedirectView. Se non di quanto aggiungerò gli oggetti del modello aggiuntivo.

@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

ho usato setAttribute sulla richiesta invece per aggirare questo problema

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

Prova questo

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