半缘修道半缘君丶 2018-03-20 08:37 采纳率: 62.5%
浏览 7281
已结题

SpringMVC + Thymeleaf 如何实现让页面公共部分的数据都加载,减少冗余,不是局部刷新

比如,网站后台,有很多公共的部分,页首,页尾,侧边栏 这些每个页面都有。
而这很多数据,比如网站名称,侧边栏列表,这些都是从数据库里取出的,像下面这样传到到前台。

     @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、比如网站名称,网站关键字,网站描述,网站备案号,网站等待信息,这种键值对的,数据表怎么设计呢?

  • 写回答

5条回答

  • a718089112 2018-03-20 08:44
    关注

    页首,页尾,侧边栏这些数据放到后台session中;前台封装一般使用Iframe控制 控制页面布局

    评论

报告相同问题?

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序