一个对象,多个视图
One object, multiple views
我有多个视图需要同一个对象。 spring 是否支持它?
示例:
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;
}
您可以使用 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;
}
我有多个视图需要同一个对象。 spring 是否支持它?
示例:
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;
}
您可以使用 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;
}