目前我@ModelAttribute用来设置全局变量(例如页脚的推文)@Controller:
public @Controller class MainController {
public @ModelAttribute void global(ModelMap map) {
map.addAttribute("tweets", /*...*/null);
}
}
Run Code Online (Sandbox Code Playgroud)
但是在创建另一个控制器以保持干净和分离时,它们在逻辑上已经消失了:
public @Controller class GalleryController {
// ...
}
Run Code Online (Sandbox Code Playgroud)
设置全局变量控制器范围的最佳做法是什么?
如果你想把一些数据放到每个页面,很容易使用拦截器:
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
为了使这项工作也在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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4813 次 |
| 最近记录: |