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

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 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计