如何设置控制器范围的全局变量
目前我使用@ModelAttribute
在我的@Controller
设置全局变量(例如页脚的推文):
public @Controller class MainController { public @ModelAttribute void global(ModelMap map) { map.addAttribute("tweets", /*...*/null); } }
但是在创建另一个控制器以保持干净和分离时,它们在逻辑上已经消失了:
public @Controller class GalleryController { // ... }
设置全局变量控制器范围的最佳做法是什么?
如果你想把一些数据放到每个页面,很容易使用拦截器:
public class PagePopulationInterceptor extends HandlerInterceptorAdapter { @Autowired private UserService userService; @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { if(modelAndView != null) { User user = userService.findOne(request); modelAndView.addObject("myUserProfile", user); } } }
为了使这项工作也在webmvc-config.xml中声明拦截器(webapp的spring配置):
你可以扩展HandlerInterceptorAdapter并添加常见的modelAttributes thr