Один объект, несколько просмотров

У меня есть несколько просмотров, которые нуждаются в одном и том же объекте. Весна поддерживает что-то для этого?

Пример:

private LanguageDao dao;

На данный момент, в каждом методе мне нужно передать переменную на мой взгляд. Каждый раз...

@GetMapping("/cart")
public ModelAndView showCart() {
    ModelAndView modelAndView = new ModelAndView();

    modelAndView.setViewName("show_cart");
    modelAndView.addObject("dao", dao); // Get rid of this...

    return modelAndView;
}

2 ответа

Решение

Вы можете создать перехватчик, используя HandlerInterceptorAdapter и переопределить postHandle метод, в котором вы добавите необходимый объект в модель. Пример ниже.

@Component
public class ExampleInterceptor extends HandlerInterceptorAdapter {

    @Override
    public void postHandle(
            HttpServletRequest request, 
            HttpServletResponse response, 
            Object handler, 
            ModelAndView modelAndView) throws Exception {

        modelAndView.addObject("object", new Object());
    }

}

Затем вам нужно добавить его в реестр и указать шаблоны пути. Если вы используете WebMvcConfigurerAdapter Вы можете сделать это, переопределив addInterceptors метод.

@Bean
public ExampleInterceptor exampleInterceptor() {
   return new ExampleInterceptor();
}

@Override
public void addInterceptors(InterceptorRegistry registry) {                
   registry.addInterceptor(exampleInterceptor()).addPathPatterns("/*");
}

Больше по теме вы можете найти здесь: http://www.journaldev.com/2676/spring-mvc-interceptor-example-handlerinterceptor-handlerinterceptoradapter

Вы можете использовать @ModelAttribute на целевом контроллере

private LanguageDao dao;

@ModelAttribute("dao")
public LanguageDao geDao(){
    return dao;
}

См. http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/ModelAttribute.html

Другие вопросы по тегам