内容展示:
上几节我们能够创建新的节点,修改节点的名称,通过业务的分析可以知道,这些节点其实就是我们要管理的广告的类目,所以这次我们需要对内容,也就是广告进行管理,由此我们我们需要分析一下内容管理的业务逻辑。
当我们选择某一个类目时,就会出现此类目下的内容:
那我们怎么实现呢?
首先分析一下数据库中的表格,从前面的博客中我们知道子节点的parent_id为父节点的id所以,这些广告内容,也即tb_content表中的内容的categoryId为对应的子节点的id,所以理清楚这个主要的逻辑就可以进行实现了,不过,在这里我们使用pageHelper进行分页处理,所以在完成业务逻辑的同时还需要考虑插件的使用。
首先我们分析一下呈现数据的content.jsp页面:
可以看到,这个页面实际上使用div标签构成的,里边使用table标签呈现数据,同时我们已可以看到请求的url的路径为/content/query/list,这个过程是当我们点击加载页面时,就需要先将上节做的分类目录加载进来,然后点我们选择目录是,页面会根据我们选择的目录进行查询,获取其对应的广告内容,所以需要先了解当页面初始化的时候干了那些事:
确实在页面初始化时首先加载了目录树,而且目录树就是我们上一博客中实现的目录树,所以在这里就不要再新去写一个了,继续进行我们的内容:
需求我们已经分析好了,但是我们查询的数据该怎么呈现到页面上呢,其实我们在之前的博客中已经了解到,内容会通过json数据的形式进行返回,所以我们需要使用我们自定义的相应的数据类型:EUDataGridResult。
Dao层:
此业务也只是对tb_content表格进行内容的查询,为一个单表查询,可以使用之前逆向工程生成的文件,以及其对应的mapper。
Service层:
@Override public EUDataGridResult getContentCateGoryList(long categoryId,int page, int rows) { //查询商品列表 TbContentExample exmaple = new TbContentExample(); Criteria criteria = exmaple.createCriteria(); criteria.andCategoryIdEqualTo(categoryId); //分页处理 PageHelper.startPage(page, rows); List<TbContent> list = contentMapper.selectByExample(exmaple); // TODO Auto-generated method stub //创建返回值对象 EUDataGridResult result = new EUDataGridResult(); result.setRows(list); //获取记录的总数 PageInfo<TbContent> pageInfo = new PageInfo<>(list); result.setTotal(pageInfo.getTotal()); return result; }
可以注意到,除了传递id,还传递了两个参数,这两个参数为分页插件所必须使用的两个参数,不过需要注意的是,分页插件是在执行查询前就需要引入的,所以我们在查询操作之前防止分页插件。
Controller层:
/** * 查询对应类目的内容 * @param categoryId * @param page * @param rows * @return 状态码 */ @RequestMapping("/content/query/list") @ResponseBody public EUDataGridResult getContentCateGoryList(long categoryId,int page, int rows){ EUDataGridResult result = contentService.getContentCateGoryList(categoryId,page,rows); return result; }
controller层的代码也完成了,调用了service层的服务,完成列表的查询,测试结果就如上面的图,内容展示就告一段落。
内容添加:
内容添加的操作为我们上图中的那个小的加号,我们点击它会弹出一个内容
可以看到,当我们选择好对应的类目的时候,添加的按钮会有一个跳转,跳转到content-add.jsp页面,所以切换到目标页面进行分析:
需要注意的是使用到了之前我们完成的图片上传的功能,所以此时在测试的时候重点提醒一下:一定要确保存放图片的nginx服务器正在运行。
可以发现我们提交的内容是通过post将表单内容进行提交,请求的路径为:
返回值:我们可以使用自定义的状态返回类NewstylesResult类对状态进行返回:
Dao层:
此业务逻辑为对tb_content表格的内容的更行,最终还是归结为tb_content这一个表,所以我们可以使用逆向工程生成的文件,以及mapper。
Service层:
@Override public NewstylesResult insertContent(TbContent content) { //补全POJO的内容 content.setCreated(new Date()); content.setUpdated(new Date()); contentMapper.insert(content); return NewstylesResult.ok(); }
Controller层:
/** * 新增功能 * @param content 待添加的广告内容类 * @return 状态码 */ @RequestMapping("/content/save") @ResponseBody public NewstylesResult insertContent(TbContent content){ NewstylesResult result = contentService.insertContent(content); return result; }
这样,增加内容的功能实现了。可以完成对应的业务逻辑。