SpringMVC+mybatis+ztree实现树的展示

实现页面中显示叔结构,并显示,已保存的节点

如图:

选中的数据是从数据库读取出来的

menu表

账户与菜单关系表 

 

前台界面:

首先需要导入ztree的js及样式

 JSP页面代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Tree</title>
    <%@include file="../../include/list.jsp" %>
</head>
<SCRIPT type="text/javascript">
		var setting = {
			check: {
				enable: true
			},
			data: {
				simpleData: {
					enable: true
				}
			}
		};

		var code;
		// 设置节点
		function setCheck() {
			var zTree = $.fn.zTree.getZTreeObj("treeDemo");
			var type = { "Y":"ps", "N":"ps"};
			zTree.setting.check.chkboxType = type;
		}
		
		// 获取选中节点
		function getCheck(){
			var zTree = $.fn.zTree.getZTreeObj("treeDemo");	
			var nodes=zTree.getCheckedNodes(true);
			var ids = "";
			for(var i in nodes){
				ids =ids + nodes[i].id+",";
			}
			return ids;
		}
		
		//保存节点关系
		function savNodeRelation(){
			var ids = getCheck();
			ws.tools.ajaxRequest({
				url : SystemGlobal.baseUrl+"/oppo/menu/saveNode.action",
				dataType : 'json',
				type : 'POST',
				data:{
					user_id:1,
					role_id:ids
				},
				successfun : function(response) {
					if (response.status == 0) {
						ws.tools.modalDialog.alert("保存成功");
					}else{
						ws.tools.modalDialog.alert(response.msg,2);
					}
				},
				errorfun : function() {
					ws.tools.modalDialog.alert('请求失败!',2);
				}
		 	}); 
		}
		
		function getData(){
			var data = null;
			ws.tools.ajaxRequest({
				url : SystemGlobal.baseUrl+"/oppo/menu/getTreeList.action",
				dataType : 'json',
				type : 'get',
				successfun : function(response) {
					if (response.status == 0) {
						 data = response.data;
					}else{
						ws.tools.modalDialog.alert(response.msg,2);
					}
				},
				errorfun : function() {
					ws.tools.modalDialog.alert('请求失败!',2);
				}
		 	});
			return data;
		}
		
		$(document).ready(function(){
			var data = getData(); // zNodes
			$.fn.zTree.init($("#treeDemo"), setting, data);
			setCheck();
			
			$("#submitNode").click(function(){
				savNodeRelation();
			});
			
			$("#refreshNode").click(function(){
				var data = getData(); // zNodes
				$.fn.zTree.init($("#treeDemo"), setting, data);
				setCheck();
			});
		});
	</SCRIPT>    
<body style="overflow:auto !important">
	<div class="">
		<ul id="treeDemo" class="ztree"></ul>
	</div>
	
	<button id="submitNode" >提交节点</button>
	<button id="refreshNode">刷新</button>
</body>
</html>

bean

public class Menu {

	private Long id;
	
	private String name;
	
	private String url;
	
	private Long pId;
	
	private boolean open;
	
	private boolean checked;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}

	public Long getpId() {
		return pId;
	}

	public void setpId(Long pId) {
		this.pId = pId;
	}

	public boolean isOpen() {
		return open;
	}

	public void setOpen(boolean open) {
		this.open = open;
	}

	public boolean isChecked() {
		return checked;
	}

	public void setChecked(boolean checked) {
		this.checked = checked;
	}
	
}

Controller代码

@Controller
@RequestMapping("/menu")
public class MenuController {
	@Autowired
	private MenuService menuService;
	
	/**
	 * 保存数据
	 * @param request
	 * @return
	 */
	@RequestMapping(value="saveNode", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
	@ResponseBody
	public ResponseData saveNode(HttpServletRequest request){
		ResponseData responseData=new ResponseData();
		Map<String,Object> map = MapUtil.requestParam2MapString(request);
		try{
			menuService.saveNode(map);
			responseData.setStatus(0);
			responseData.setMsg("保存数据成功");
	    } catch (Exception e) {
			e.printStackTrace();
			responseData.setStatus(1);
			responseData.setMsg("保存数据失败");
		}
		return  responseData;
	}
	
	@RequestMapping(value="getTreeList", method = RequestMethod.GET, produces = "application/json;charset=UTF-8")
	@ResponseBody
	public ResponseData getTreeList(HttpServletRequest request){
		ResponseData responseData=new ResponseData();
		
		try{
			List<Menu> menu = menuService.getMenuByIds();
			responseData.setStatus(0);
			responseData.setMsg("获取数据成功");
			responseData.setData(menu);
	    } catch (Exception e) {
			e.printStackTrace();
			responseData.setStatus(1);
			responseData.setMsg("获取数据失败");
		}
		return  responseData;
	}
	
}

Service代码

@Service
public class MenuService extends BaseService<MenuDao> {
	@Autowired
	private MenuDao menuDao;
    
	public List<Menu> getMenu(){
		return menuDao.getMenu();
	}
	
	/**
	 * 插入节点
	 * @param map
	 */
	public void saveNode(Map<String,Object> map){
		menuDao.deleteNode(map.get("user_id").toString());
		menuDao.insertNode(map);
	}
	
	/**
	 * 获取节点
	 * @return
	 */
	public List<Menu> getMenuByIds(){
		List<Menu> list = menuDao.getMenu();
		Set<Long> p_list = new HashSet<>();
		Map<String, Object> map = menuDao.getMenuIdByUserId("1");
		String ids [] = String.valueOf(map.get("role_id")).split(",");
		List<String> idsList = Arrays.asList(ids);
		// 父节点展开、子节点选中
		for(Menu m : list){
			if(m.getpId() == 0){
				m.setOpen(true); //打开
			}else{
				if(idsList.contains(m.getId()+"")){
					p_list.add(m.getpId());
					m.setChecked(true); // 选中
				}
			}
		}
		// 父节点选中
		for(Menu m : list){
			if(p_list.contains(m.getId())){
				m.setChecked(true); // 选中
			}
		}
		
		return list;
	}
	
}

DAO代码

public interface MenuDao extends BaseDao {
	
	public List<Menu> getMenu();
	
	public void insertNode(Map<String,Object> map);
	
	public Map<String,Object> getMenuIdByUserId(String id);
	
	public List<Menu> getMenuByIds(String [] ids);
	
	public void deleteNode(String id);
}

XML代码

<!-- 获取菜单 -->
	<select id="getMenu" resultType="com.oppo.common.model.Menu">
		select id,name,url,p_id pId from newmedia_base.menu
	</select>
	
	<!-- 获取菜单ID -->
	<select id="getMenuIdByUserId" resultType="java.util.Map">
		select id,user_id,role_id from newmedia_base.role_menu where user_id = #{id}
	</select>
	
	<!-- 获取菜单调通IDS -->
	<select id="getMenuByIds" resultType="com.oppo.common.model.Menu">
		select id,name,url,p_id pId from newmedia_base.menu
		where
		id in
		<foreach item="item" index="index" collection="array"  open="(" separator="," close=")">
			#{item}
		</foreach>
	</select>

<insert id="insertNode" parameterType="java.util.Map" >
		insert into  newmedia_base.role_menu         
		<trim prefix="(" suffix=")" suffixOverrides=",">
			<if test="user_id != null">  user_id, </if>
			<if test="role_id != null">  role_id, </if>
		</trim>
		<trim prefix="values (" suffix=")" suffixOverrides=",">
			<if test="user_id != null">   #{user_id,jdbcType=INTEGER },</if>
			<if test="role_id != null">   #{role_id,jdbcType=INTEGER },</if>
		</trim>
	</insert>
	
	<delete id="deleteNode" parameterType="java.lang.String">
    	delete from newmedia_base.role_menu where user_id = #{id}
    </delete>

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值