淘淘商城_CMS_内容分类管理界面(巨坑)

淘淘商城 之 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 ;
}

 

其余的 更新 , 创建 , 查找 就是 很简单的了。在此 就不版署了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值