比如,网站后台,有很多公共的部分,页首,页尾,侧边栏 这些每个页面都有。
而这很多数据,比如网站名称,侧边栏列表,这些都是从数据库里取出的,像下面这样传到到前台。
@ModelAttribute
public ModelAndView index() {
ModelAndView modelAndView = new ModelAndView("admin/index");
List<Menu> list = new ArrayList<>();
list.add(new Menu("fa fa-dashboard", "仪表盘", contextPath+"/dashboard"));
list.add(new Menu("fa fa-pencil", "帖子管理", contextPath+"/posts"));
list.add(new Menu("fa fa-book", "分类管理", contextPath+"/categories"));
list.add(new Menu("fa fa-comment", "回复管理", contextPath+"/replies"));
list.add(new Menu("fa fa-users", "用户管理", contextPath+"/users"));
modelAndView.addObject("menuList", list);
return modelAndView;
}
现在的困惑是,如果让每个页面都能显示上面的数据
每个页面都要在对应的方法里都要写上上面这一段代码,将网站信息装到 Model 里吗?
有什么办法,能减少代码冗余吗?
我这里有几种备选方法,以前用过,感觉很 low,不知道正常的解决办法是什么。
1、使用 @ModelAttribute 注解,在所有方法前都加载该该方法
/**
* 公共加载部分
* @param model
*/
@ModelAttribute
public void loadCommon(Model model) {
List<Menu> list = new ArrayList<>();
list.add(new Menu("fa fa-dashboard", "仪表盘", contextPath+"/dashboard"));
list.add(new Menu("fa fa-pencil", "帖子管理", contextPath+"/posts"));
list.add(new Menu("fa fa-book", "分类管理", contextPath+"/categories"));
list.add(new Menu("fa fa-comment", "回复管理", contextPath+"/replies"));
list.add(new Menu("fa fa-users", "用户管理", contextPath+"/users"));
model.addAttribute("menuList", list);
}
/**
* 获取后台管理主页面
*
* @return
*/
@GetMapping
public String index() {
return "admin/index";
}
感觉上面的方法还是很冗余,每个控制器里都要写,每个方法加载都执行,很不好。
2、在过滤器或者拦截器里将网站数据加载进去
跟上面效果差不多,每个方法都要执行
3、ajax 加载内容部分,共有部分不变
这个方法挺好的,但是我我还是希望页面刷新比较好
这里求 SpringMVC 如何将共有的数据加载到前台,减少冗余
补充:
这里再提两个问题
1、如何是网站前台呢?也使用 iframe 吗,不可能吧?
2、比如网站名称,网站关键字,网站描述,网站备案号,网站等待信息,这种键值对的,数据表怎么设计呢?