说在前面的话

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

新增商品分类

由于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. MySQL选错索引导致的线上慢查询事故

    前言 又和大家见面了!又两周过去了,我的云笔记里又多了几篇写了一半的文章草稿.有的是因为质量没有达到预期还准备再加点内容,有的则完全是一个灵感而已,内容完全木有.羡慕很多大佬们,一周能产出五六篇文章, ...

  2. NOI On Line 提高组题解

    (话说其实我想填的是去年CSP的坑...但是貌似有一道题我还不会写咕咕咕... 先写一下这一次的题解吧. T1:序列.题意省略. 两种操作.这种题要先分析部分分 给出了全部都是2操作的子任务. 发现A ...

  3. luogu P2462 [SDOI2007]游戏

    LINK:SDOI2007游戏 题意:接龙前一个要比后面大1 且后一个单词出现的各自字母的次数>=前一个单词各自的字母的次数 考虑暴力dp sort之后dpY 显然会T. 考虑我们没必要枚举j ...

  4. 发送ajax请求时候注意的问题

    1.在发送ajax请求一般都是默认为异步,就是不去等待后台响应直接可以继续发送, 但这样会有时候遇到一些问题,无法获得后台的响应参数, 所以在你打开编辑弹出框完成数据编辑后无法刷新页面, 这时候可能存 ...

  5. 精通python网络爬虫PDF高清完整版免费下载|百度云盘|Python基础教程免费电子书

    点击获取书籍提取码:yc9w

  6. tensorflow2.0 实现gpu和cpu切换

      昨天把GPU版本的tf2.0 安装成功之后,现在所有的代码运行居然都在gpu上跑了,并且在对gpu使用情况没有限制的条件下,既然gpu内存跑满了,代码就崩了怎么样才能随心所欲的指定代码是在cpu还 ...

  7. asp.net 远程模型验证

    有这样一些场景,我们需要模型验证,某些字段不允许重复,但是又不希望在数据访问层增加一堆额外逻辑判断.我们需要数据访问层简洁,这种模型验证在进去Action之前,验证不通过直接告诉前端. 一个特性,继承 ...

  8. requests-html库轻体验-HTMLSession下载表情包

    requests-html实战,HTMLSession下载斗图啦最新表情包 前言 在这篇文章之前,我写了requests入门实践02_下载斗图拉最新表情包用正则表达式提取url,来下载斗图啦最新表情包 ...

  9. Junit4 测试代码

    Junit4 测试代码 import org.junit.Test; import org.junit.runner.RunWith; @RunWith(SpringJUnit4ClassRunner ...

  10. 用MPI进行分布式内存编程(1)

    <并行程序设计导论>第三章部分程序 程序3.1运行实例 #include<stdio.h> #include<string.h> #include<mpi.h ...