如何设置控制器范围的全局变量
目前,我使用以下@ModelAttribute
命令设置全局变量(例如,页脚的推文)@Controller
:
public @Controller class MainController { public @ModelAttribute void global(ModelMap map) {
map.addAttribute("tweets", /*...*/null);
}
}
但是从逻辑上讲,当创建另一个Controller来保持事物清洁和分离时,它们就消失了:
public @Controller class GalleryController { // ...
}
在全局范围内设置Controller的最佳实践是什么?
回答:
如果要在每个页面上放置一些数据,则很容易使用拦截器:
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配置)中声明拦截器:
<mvc:interceptors> <mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.yourcompany.yourapp.util.PagePopulationInterceptor" />
</mvc:interceptor>
<!-- other interceptors (locale, theme and so on) -->
</mvc:interceptors>
以上是 如何设置控制器范围的全局变量 的全部内容, 来源链接: utcz.com/qa/414377.html