e3mall商城的归纳总结5之修改商品分类、e3mall—content的搭建
说在前面的话
本节基本上没有用到新的知识点。主要还是对数据库的增删改查以及创建了一个新的内容模块。
新增商品分类
由于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的搭建的更多相关文章
- e3mall商城的归纳总结9之activemq整合spring、redis的缓存
敬给读者 本节主要给大家说一下activemq整合spring,该如何进行配置,上一节我们说了activemq的搭建和测试(单独测试),想看的可以点击时空隧道前去查看.讲完了之后我们还说一说在项目中使 ...
- e3mall商城的归纳总结1之项目的架构
首先来谈谈e3mall商城,e3mall商城是黑马推出一个学习的项目,前身是淘淘商城.两个用的技术差不多.,但由于后期加了一些新技术,更名为e3mall商城.本商城为分布式商城,主要用到的技术使mav ...
- e3mall商城的归纳总结10之freemarker的使用和sso单点登录系统的简介
敬给读者的话 本节主要讲解freemarker的使用以及sso单点登录系统,两种技术都是比较先进的技术,freemarker是一个模板,主要生成一个静态静态,能更快的响应给用户,提高用户体验. 而ss ...
- e3mall商城的归纳总结6之redis
一.说在前面的话 前面几节我们主要对该项目的后端进行了增删改查,但是所有的数据都是存放在数据库中,这样的话数据库的压力显而易见是很大的,因此本节学习nosql的缓存,也就是redis的使用,在使用之前 ...
- e3mall商城的归纳总结4之图片服务器以及文本编辑器
一.图片服务器 --1.认识图片服务器 大家可能都知道在分布式架构中使用图片上传可能会导致文件存放在某一个项目,而我们的项目基本上都采用集群的方式 ,因此这样会导致图片的问题比较难以存放,在这里我们有 ...
- e3mall商城的归纳总结2之认识dubbo、zookeeper
由于本项目用的是soa架构,因此必须需要两个系统之间进行通信,目前的解决办法有三种(本人认为) Webservice:效率不高基于soap协议.项目中不推荐使用. 使用restful形式的服务:htt ...
- e3mall商城的归纳总结7之solr搭建和应用
敬给读者的话 本文主要应用的技术是solr技术的搭建和应用,本文小编尽量写的更详细一些,让读者在不考虑项目的情况下也能正常完成solr的搭建,说完搭建之后,再说明运行solrj在项目中如何应用solr ...
- e3mall商城的归纳总结8之solr集群、activemq的搭建和使用
由于本节内容比较分散,因此专门为这两个技术进行开展了帖子. solr集群的搭建 solr集群solrJ的测试 activemq的搭建 activemq的使用 引入activemq.jar包 我们先来说 ...
- e3mall商城的归纳总结3之后台商品节点、认识nginx
一 后台商品节点 大家都知道后台创建商品的时候需要选择商品的分类,而这个商品的分类就就像一棵树一样,一层包含一层又包含一层.因此这里用的框架是easyUiTree.该分类前端使用的是异步加载模式(指 ...
随机推荐
- 5.15 牛客挑战赛40 E 小V和gcd树 树链剖分 主席树 树状数组 根号分治
LINK:小V和gcd树 时限是8s 所以当时好多nq的暴力都能跑过. 考虑每次询问暴力 跳父亲 这样是nq的 4e8左右 随便过. 不过每次跳到某个点的时候需要得到边权 如果直接暴力gcd的话 nq ...
- bzoj 4974 [Lydsy1708月赛]字符串大师 KMP 最小循环元 构造
LINK:字符串大师 给出一个字符串的每个前缀的最小循环元 还原字典序最小的原字符串. 一个比较显然的结论 或者说 学过KMP的都知道 对于每个前缀i求出nex数组后 那么i-nex[i]为最小循环元 ...
- Kaggle-pandas(2)
Intndexing-selecting-assigning 教程 介绍选择要处理的pandas DataFrame或Series的特定值是几乎将要运行的任何数据操作中的一个隐含步骤,因此在Pytho ...
- SqlServer 多表连接、聚合函数、模糊查询、分组查询应用总结(回归基础)
--exists 结合 if else 以及 where 条件来使用判断是否有数据满足条件 select * from Class where Name like '%[1-3]班' if (not ...
- Java实现短信验证码
前言 本人使用的是阿里短信服务,一开始尝试了许多不同的第三方短信服务平台,比如秒滴科技.梦网云通讯.当初开始为什么会选择这两个,首先因为,他们注册就送10元钱(#^.^#),但是后来却发现他们都需要认 ...
- JDK11.0.7下载及安装详细教程(win10)
0.背景知识 JRE: Java Runtime Environment JDK:Java Development Kit JRE顾名思义是java运行时环境,包含了java虚拟机,java基础类库. ...
- 用 Python 写个消消乐小游戏
提到开心消消乐这款小游戏,相信大家都不陌生,其曾在 2015 年获得过玩家最喜爱的移动单机游戏奖,受欢迎程度可见一斑,本文我们使用 Python 来做个简单的消消乐小游戏. 很多人学习python,不 ...
- linux tcpdump抓包Post请求
tcpdump -s 0 -A 'tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)' -w f ...
- c语言学习笔记之typedef
这是我觉得这个博主总结的很好转载过来的 原地址:https://blog.csdn.net/weixin_41632560/article/details/80747640 C语言语法简单,但内涵却博 ...
- CSS品控与流程
精通CSS意味着不仅能写出可用的标记和样式,还能让代码好阅读.方便移植.易维护. 1.外部代码质量:调试CSS 外部代理质量就是用户能体验到的最终结果.主要体现在几个方面. 正确性.CSS属性名都写对 ...