一个对象,多个视图

时间:2016-12-21 13:44:38

标签: java spring-mvc view modelandview

我有多个视图需要同一个对象。春天是否能为它提供支持?

示例:

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 个答案:

答案 0 :(得分:1)

您可以使用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

答案 1 :(得分:1)

您可以在目标控制器上使用@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

相关问题