说在前面的话

本节基本上没有用到新的知识点。主要还是对数据库的增删改查以及创建了一个新的内容模块。

新增商品分类

由于easyUI的Tree需要三个字段(Id、state、text),

[{
"id": 1,
"text": "Node 1",
"state": "closed"
},{
"id": 2,
"text": "Node 2",
"state": "closed"
}]

因此做了一个工具类EasyUITreeNode ,方便调用返回对象。

public class EasyUITreeNode implements Serializable{

	private long id;
private String text;
private String state;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
} }

当页面加载后自动获取tree目录,此时parent_id为空,因此我们再后台设置一下若parent_id为空,则默认为0.0为一级目录.

	@RequestMapping("/content/category/list")
@ResponseBody
public List<EasyUITreeNode> getContentCat(@RequestParam(defaultValue="0",name="id")Long parent_id){
return contentCatService.getContentCategory(parent_id); }

service层:

	@Override
public List<EasyUITreeNode> getContentCategory(Long id) {
TbContentCategoryExample example = new TbContentCategoryExample();
example.createCriteria().andParentIdEqualTo(id);
List<TbContentCategory> list = contentCategoryMapper.selectByExample(example);
List<EasyUITreeNode> results = new ArrayList<>();
for (TbContentCategory l : list) {
EasyUITreeNode easyUITreeNode = new EasyUITreeNode();
easyUITreeNode.setId(l.getId());
easyUITreeNode.setState(l.getIsParent()?"closed":"open");
easyUITreeNode.setText(l.getName());
results.add(easyUITreeNode);
}
return results;
}

创建分类url:/content/category/create

逻辑介绍:当用户右击contentCategory的节点时,激发了js效果,则显示添加、重命名、删除三个选项。



当用户点击添加时,contentCategory在选择的节点上创建一个新的叶子节点,并且把该节点的id设置为0,parentId设置为叶子节点的父节点(用户点击的节点),text设置为“新建分类”,然后在整个tree中寻找id为0的节点,然后把该节点设置为可编辑状态

如图:

当用户结束编辑时(onAfterEdit),触发了onAfterEdit事件(此事件可能被两种情况触发1、创建新节点;2、重命名节点)若是第一种情况,则节点的id为0,所以进行判断,若节点的id为0,则向服务器发送创建节点请求,反之发送更改节点请求。

创建节点的请求需要发送parentId和name,若成功,系统需要返回该节点的id和status(用e3result对象返回),然后再把id的值(id=0新创建的节点id都为0)改为新的id的值(服务器返回的值)。

更改节点的请求发送本节点的id和text即可。

代码如图:



service层:

当该节点创建新的节点后,该节点一定是父亲节点(isparent=true),新的节点必须是叶子节点(isparent=false),因此service需要进行两步

	//创建内容管理节点
@Override
public E3Result createNodeCat(Long parentId, String name) {
//补充数据
TbContentCategory record = new TbContentCategory();
record.setCreated(new Date());
record.setIsParent(false);//新建的一定是叶子节点
record.setName(name);
record.setParentId(parentId);
record.setSortOrder(1);//默认1排序
record.setStatus(1);//可选值:1(正常),2(删除)',
record.setUpdated(new Date());
//添加数据(设置了select LAST_INSERT_ID())
contentCategoryMapper.insertSelective(record);
//把它的父亲节点变成is_parent
TbContentCategoryExample example = new TbContentCategoryExample();
Criteria createCriteria = example.createCriteria();
createCriteria.andIdEqualTo(parentId);
//创建一个category对象,除了isparent为true,其他都为null
TbContentCategory category = new TbContentCategory();
category.setIsParent(true);
//只修改不为空的数据
//把父节点更改的isparent改为true
contentCategoryMapper.updateByExampleSelective(category, example);
return E3Result.ok(record);
}

controller层:

	//创建新的节点
@RequestMapping("/content/category/create")
@ResponseBody
public E3Result createNodeCat(Long parentId,String name){
return contentCatService.createNodeCat(parentId, name);
}

修改商品分类

修改商品逻辑同上,直接贴代码

service层:

@Override
public void updateNodeCat(Long id, String name) {
TbContentCategoryExample example = new TbContentCategoryExample();
example.createCriteria().andIdEqualTo(id);
//创建pojo
TbContentCategory record = new TbContentCategory();
record.setName(name);
contentCategoryMapper.updateByExampleSelective(record, example);
}

controller层:

@RequestMapping("/content/category/update")
@ResponseBody
public void updateNodeCat(Long id,String name){
contentCatService.updateNodeCat(id, name);
}

当用户点击重命名(楼上已说)和删除后的逻辑代码(点击删除向服务器发送删除请求)

删除商品分类

service层:

	@Override
public void deleteNodeCat(Long id) {
contentCategoryMapper.deleteByPrimaryKey(id);
}

controller层:

@RequestMapping("/content/category/delete/")
@ResponseBody
public void deleteNodeCat(Long id){
contentCatService.deleteNodeCat(id); }

创建e3mall-content模块

同第一天略

e3mall商城的归纳总结5之修改商品分类、e3mall—content的搭建的更多相关文章

  1. e3mall商城的归纳总结9之activemq整合spring、redis的缓存

    敬给读者 本节主要给大家说一下activemq整合spring,该如何进行配置,上一节我们说了activemq的搭建和测试(单独测试),想看的可以点击时空隧道前去查看.讲完了之后我们还说一说在项目中使 ...

  2. e3mall商城的归纳总结1之项目的架构

    首先来谈谈e3mall商城,e3mall商城是黑马推出一个学习的项目,前身是淘淘商城.两个用的技术差不多.,但由于后期加了一些新技术,更名为e3mall商城.本商城为分布式商城,主要用到的技术使mav ...

  3. e3mall商城的归纳总结10之freemarker的使用和sso单点登录系统的简介

    敬给读者的话 本节主要讲解freemarker的使用以及sso单点登录系统,两种技术都是比较先进的技术,freemarker是一个模板,主要生成一个静态静态,能更快的响应给用户,提高用户体验. 而ss ...

  4. e3mall商城的归纳总结6之redis

    一.说在前面的话 前面几节我们主要对该项目的后端进行了增删改查,但是所有的数据都是存放在数据库中,这样的话数据库的压力显而易见是很大的,因此本节学习nosql的缓存,也就是redis的使用,在使用之前 ...

  5. e3mall商城的归纳总结4之图片服务器以及文本编辑器

    一.图片服务器 --1.认识图片服务器 大家可能都知道在分布式架构中使用图片上传可能会导致文件存放在某一个项目,而我们的项目基本上都采用集群的方式 ,因此这样会导致图片的问题比较难以存放,在这里我们有 ...

  6. e3mall商城的归纳总结2之认识dubbo、zookeeper

    由于本项目用的是soa架构,因此必须需要两个系统之间进行通信,目前的解决办法有三种(本人认为) Webservice:效率不高基于soap协议.项目中不推荐使用. 使用restful形式的服务:htt ...

  7. e3mall商城的归纳总结7之solr搭建和应用

    敬给读者的话 本文主要应用的技术是solr技术的搭建和应用,本文小编尽量写的更详细一些,让读者在不考虑项目的情况下也能正常完成solr的搭建,说完搭建之后,再说明运行solrj在项目中如何应用solr ...

  8. e3mall商城的归纳总结8之solr集群、activemq的搭建和使用

    由于本节内容比较分散,因此专门为这两个技术进行开展了帖子. solr集群的搭建 solr集群solrJ的测试 activemq的搭建 activemq的使用 引入activemq.jar包 我们先来说 ...

  9. e3mall商城的归纳总结3之后台商品节点、认识nginx

    一  后台商品节点 大家都知道后台创建商品的时候需要选择商品的分类,而这个商品的分类就就像一棵树一样,一层包含一层又包含一层.因此这里用的框架是easyUiTree.该分类前端使用的是异步加载模式(指 ...

随机推荐

  1. luogu P6570 [NOI Online #3 提高组]优秀子序列 二进制 dp

    LINK:P6570 [NOI Online #3 提高组]优秀子序列 Online 2的T3 容易很多 不过出于某种原因(时间不太够 浪了 导致我连暴力的正解都没写. 容易想到 f[i][j]表示前 ...

  2. 数据分析second week(7.22~7.28)

    描述性统计Python实现 这周学习时间也就几个小时,由于python也正在学习,Anaconda也有,所以那些安装啥的就偷懒下不写了,直接贴出python代码 数据是随机生成,计算是调用库里的函数. ...

  3. beyond compare4 密钥 亲测可用

    beyond compare4过了试用期: 密钥: w4G-in5u3SH75RoB3VZIX8htiZgw4ELilwvPcHAIQWfwfXv5n0IHDp5hv1BM3+H1XygMtiE0-J ...

  4. 和菜鸟一起学linux之DBUS基础学习记录(转)

    转自:https://www.cnblogs.com/wuyida/p/6299998.html D-Bus三层架构 D-Bus是一个为应用程序间通信的消息总线系统, 用于进程之间的通信.它是个3层架 ...

  5. 006_go语言中的if else条件语句

    代码演示 package main import "fmt" func main() { if 7%2 == 0 { fmt.Println("7 is even&quo ...

  6. Maven常见异常及解决方法---测试代码编译错误

    [ERROR] Please refer to E:\maven\web_nanchang\target\surefire-reports for the individual test result ...

  7. Hexo博客部署到远程仓库(Conding、Gitee、Github)

    一.本地环境搭建 1.安装Git Git可以有效.高速的处理各种项目版本管理.也就是用来管理你的hexo博客文章,上传到GitHub的工具. Git下载地址 安装好了之后使用git -version查 ...

  8. XCTF-WEB-高手进阶区-Web_python_template_injection-笔记

    Web_python_template_injection o(╥﹏╥)o从这里开始题目就变得有点诡谲了 网上搜索相关教程的确是一知半解,大概参考了如下和最后的WP: http://shaobaoba ...

  9. JavaScript 实用方法

    1.按时间显示问候语 2.强制光标停留位置 3.保存页面文本 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN& ...

  10. Spring Boot 应用程序启动流程分析

    SpringBoot 有两个关键元素: @SpringBootApplicationSpringApplication 以及 run() 方法 SpringApplication 这个类应该算是 Sp ...