淘淘商城 之 CMS (Content Management System)
--- > 内容 修改 操作
--- > 内容 添加 操作
----> 内容 查询 操作
----> 内容 删除 操作 ( 以此做 引用 说明,其余操作 简单些。)
内容 删除 操作 - 相关方法:
Service:DeleteContentCategory
Controller: @RequestMapping(value = "/content/category/delete" , method = RequestMethod.POST)
内容 删除 操作 - 相关坑点 :
jsp界面:
$.messager.confirm('确认','确定删除名为 '+node.text+' 的分类吗?',function(r){
if(r){
$.post("/content/category/delete",{ parentId:node.parentId , id:node.id },function(){
tree.tree("remove",node.target);
});
}
});
封装数据返回界面:(省略:@RequestMapping("/content/category")路径 与类上)
// 查询节点链表
@RequestMapping("/list")
@ResponseBody
public List<EUTreeNode> getContentCategoryList(@RequestParam(value="id" , defaultValue="0")Long parentId){
List<EUTreeNode> contentCategoryList = categoryService.ContentCategoryList(parentId);
return contentCategoryList;
}
注:由于EUTreeNode 没有 parentId 属性,所以delete方法的 parentId 属于 undefined ,POST请求没有 parentId 属性。
解决办法:1.在EUTreeNode 中 添加 parentId属性,在list查询时返回数据。 2,删除 parentId 请求值,Service根据id处理
例如 在 EUTreeNode 中添加一个字段:
List<EUTreeNode> list = new ArrayList<EUTreeNode>();
for (TbContentCategory tbContentCategory : selectByExample) {
EUTreeNode node = new EUTreeNode();
node.setId( tbContentCategory.getId() );
node.setText( tbContentCategory.getName() );
// getIsParent : 1为true,0为false,表示是否是父亲节点
node.setState( tbContentCategory.getIsParent()?"closed":"open" );
node.setParentId( tbContentCategory.getParentId() );
list.add(node);
}
内容 删除 操作 - 相关处理逻辑:
由于 我们删除的位置 不确定,所以我们进行删除的时候,无法判断是否是修改某一部分属性。分类如下:
1. 子节点:删除位置在不可展开的节点上 : 考虑因素: 自身节点 , 父节点是否只有该一个节点
2. 中间节点:删除位置在 结巴 节点处上 : 考虑因素 : 子节点 , 父节点 是否只有改一个节点 , 自身
处理逻辑如下: 对于 自身 以及 父节点 节点 , 一个查询 ,一个修改,对于子节点 , 一个递归,一个修改,一个查询
相关代码 如下:
Controller: 注 : 省略 @RequestMapping("/content/category")
/*
删除节点
url: /content/category/delete/"
paremeter:{parentId:node.parentId,id:node.id}
*/
@RequestMapping(value = "/delete" , method = RequestMethod.POST)
@ResponseBody
public TaotaoResult DeleteContentCategory(
@RequestParam(value="parentId") Long parentId,
@RequestParam(value="id") Long id){
TaotaoResult taotaoResult = categoryService.DeleteContentCategory( parentId , id);
return taotaoResult;
}
public interface ContentCategoryService {
// 获取 大广告位的页面信息
public List<EUTreeNode> ContentCategoryList(long id);
// 创建 大广告位页面信息
public TaotaoResult CreateContentCategory(long parentid , String name);
// 修改 大广告位页面信息
public TaotaoResult UpdateContentCategory(long id , String name);
// 删除 打广告位页面信息
public TaotaoResult DeleteContentCategory(long parentid , long id);
}
Service Implements :
@Override
public TaotaoResult DeleteContentCategory(long parentid, long id) {
// ---> 自身节点的处理 // 完善信息
TbContentCategoryExample myNode = new TbContentCategoryExample();
Criteria myCriteria = myNode.createCriteria();
myCriteria.andIdEqualTo( id );
myCriteria.andParentIdEqualTo( parentid );
// 修改信息
List<TbContentCategory> MyList = tbContentCategoryMapper.selectByExample( myNode );
if(MyList!=null && MyList.size() == 1) {
TbContentCategory tbContentCategory = MyList.get(0);
tbContentCategory.setStatus( 0 );
tbContentCategory.setUpdated( new Date() );
// 更新数据
tbContentCategoryMapper.updateByPrimaryKeySelective( tbContentCategory );
}
// ---> 父亲节点的处理 // 如果他是唯一的子节点 设置父节点的状态
TbContentCategoryExample parentNode = new TbContentCategoryExample();
Criteria parentCriteria = parentNode.createCriteria();
parentCriteria.andIdEqualTo( parentid );
// 查询内容
List<TbContentCategory> parentList = tbContentCategoryMapper.selectByExample( parentNode );
if(parentList!=null && parentList.size() == 1) {
TbContentCategory result = tbContentCategoryMapper.selectByPrimaryKey( parentid );
result.setUpdated( new Date() );
result.setIsParent( false );
// 更新 父节点 数据
tbContentCategoryMapper.updateByPrimaryKeySelective(result);
}
// ---> 孩子节点的处理 // 如果他存在子节点 设置子节点的状态
UpdateChildList( id );
// 返回结果
return TaotaoResult.ok();
}
public void UpdateChildList(long id) {
TbContentCategoryExample childNode = new TbContentCategoryExample();
Criteria childCriteria = childNode.createCriteria();
childCriteria.andParentIdEqualTo( id );
// 查询内容
List<TbContentCategory> childrenList = tbContentCategoryMapper.selectByExample( childNode );
// 结束 擦边条件
if(childrenList == null || childrenList.size() == 0)
return ;
// 修改孩子信息
for(TbContentCategory tb : childrenList) {
tb.setStatus( 0 );
tb.setUpdated( new Date() );
// 更新 子节点 数据
tbContentCategoryMapper.updateByPrimaryKeySelective( tb );
// 更新 孩子的孩子 数据
UpdateChildList( tb.getId() );
}
return ;
}
其余的 更新 , 创建 , 查找 就是 很简单的了。在此 就不版署了。