easyui Tree

效果如下,树以复选框的形式呈现。


1、前台:

<%@ 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">    
    <meta name="keywords" content="jquery,ui,easy,easyui,web">    
    <meta name="description" content="easyui help you build your web page easily!">    
    <title>jQuery EasyUI CRUD Demo</title>    
    <link rel="stylesheet" type="text/css" href="assets/themes/default/easyui.css">    
    <link rel="stylesheet" type="text/css" href="assets/themes/icon.css">    
    <style type="text/css">    
        #fm{    
            margin:0;    
            padding:10px 30px;    
        }    
        .ftitle{    
            font-size:14px;    
            font-weight:bold;    
            color:#666;    
            padding:5px 0;    
            margin-bottom:10px;    
            border-bottom:1px solid #ccc;    
        }    
        .fitem{    
            margin-bottom:5px;    
        }    
        .fitem label{    
            display:inline-block;    
            width:80px;    
        }    
    </style>    
    <script type="text/javascript" src="assets/jquery.min.js"></script>    
    <script type="text/javascript" src="assets/jquery.easyui.min.js"></script>    
    <script type="text/javascript">    
        var url;    
        $(function(){
        	$("#tt").tree({     //选中子节点,父节点一定选中
                checkbox: true,
                cascadeCheck: false,
                onCheck: function (node, checked) {
                  if (checked) {
                    var parentNode = $("#tt").tree('getParent', node.target);
                    if (parentNode != null) {
                      $("#tt").tree('check', parentNode.target);
                    }
                  } else {
                    var childNode = $("#tt").tree('getChildren', node.target);
                    if (childNode.length > 0) {
                      for (var i = 0; i < childNode.length; i++) {
                        $("#tt").tree('uncheck', childNode[i].target);
                      }
                    }
                  }
                }
              });
        })
       
        
      //编辑
        function editUser(){    
            var row = $('#dg').datagrid('getSelected');    
            if (row){    
                 $('#dlg1').dialog('open').dialog('setTitle','编辑角色');    
                $('#fm1').form('load',row);    
                $(".uprolename").val(row.name);  
                $(".berolename").val(row.name);
                url = 'updaterole?id='+row.id;    
            }    
        }   
        function getChecked(){     //获取所有选中节点的id
			var nodes = $('#tt').tree('getChecked');
			var s = '';
			for(var i=0; i<nodes.length; i++){
				if (s != '') s += ',';
				s += nodes[i].id;
			}
			alert(s);
			return s;
		}
        function saveUpdate(){  
        	var chmenu=getChecked();
        	$(".upmenu").val(chmenu);
            $('#fm1').form('submit',{    
                url: url,    
                onSubmit: function(){    
                    return $(this).form('validate');    
                },    
                success: function(result){    
                    alert(result);    
                  // var result = eval('('+result+')');    
                    if (result.endsWith("成功")){    
                        $('#dlg1').dialog('close');      // close the dialog    
                        $('#dg').datagrid('reload');    // reload the user data    
                    } else {    
                        $.messager.show({    
                            title: 'Error',    
                            msg: result.msg    
                        });    
                    }    
                }    
            });    
        }    
        
       
    </script>    
</head>    
<body>    
      
        
    <table id="dg" title="My Users" class="easyui-datagrid" style="width:700px;height:250px"    
            url="role"    
            toolbar="#toolbar" pagination="true"    
            rownumbers="true" fitColumns="true" singleSelect="true">    
        <thead>    
            <tr>    
               <th data-options="field:'name'">角色名称</th> 
            </tr>    
        </thead>    
    </table>    
    <div id="toolbar">    
        <a href="#" class="easyui-linkbutton" iconCls="icon-add" plain="true" οnclick="newUser()">新增角色</a>    
        <a href="#" class="easyui-linkbutton" iconCls="icon-edit" plain="true" οnclick="editUser()">编辑角色</a>    
        <a href="#" class="easyui-linkbutton" iconCls="icon-remove" plain="true" οnclick="removeUser()">删除角色</a>    
      </div>  
     
    
    <!-- 编辑角色 -->
    <div id="dlg1" class="easyui-dialog" style="width:600px;height:560px;padding:10px 20px"    
            closed="true" buttons="#dlg-buttons">    
        <div class="ftitle">编辑角色信息</div>    
        <form id="fm1" method="post" novalidate>    
            <div class="fitem">    
                <label>角色名称</label>    
                <input name="uprolename" id="uprolename" class="easyui-validatebox uprolename" required="true">  
                <input name="berolename" id="berolename" class="easyui-validatebox berolename" type="hidden">    
                <input name="upmenu" id="upmenu" class="easyui-validatebox upmenu" type="hidden">      
            </div>    
            <div>分配权限</div>
            <!-- 权限菜单树 -->
            <div style="margin:10px 0">
		<!-- <input type="checkbox" checked οnchange="$('#tt').tree({cascadeCheck:$(this).is(':checked')})" type="hidden">CascadeCheck  -->
		
	</div>
	<div class="easyui-panel" style="padding:5px">
		<ul id="tt" class="easyui-tree" data-options="url:'getrolemenu',method:'get',animate:true,checkbox:true"></ul>
	</div>
            <!-- 权限菜单树结束 -->
        </form>    
    </div>    
    <div id="dlg-buttons">    
        <a href="#" class="easyui-linkbutton" iconCls="icon-ok" οnclick="saveUpdate()">保存编辑</a>    
        <a href="#" class="easyui-linkbutton" iconCls="icon-cancel" οnclick="javascript:$('#dlg').dialog('close')">Cancel</a>    
    </div>    
    <!-- 编辑角色结束 -->
</body>    
</html>    
绿色代码段为和树相关的代码,看下后台:

2、

(1、)实体类:

用easyui加载树,需要树的属性有id,text(即显示的文本信息),children(子节点)。

package com.ifytek.domain;

import java.util.ArrayList;
//角色菜单
public class Menu1 {
	private int id;
	private int pid;
	private String text;
	private ArrayList<Menu1> children = new ArrayList<>();
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public int getPid() {
		return pid;
	}
	public void setPid(int pid) {
		this.pid = pid;
	}
	public String getText() {
		return text;
	}
	public void setText(String text) {
		this.text = text;
	}
	public ArrayList<Menu1> getChildren() {
		return children;
	}
	public void setChildren(ArrayList<Menu1> children) {
		this.children = children;
	}
}

(2、)servlet:

package com.ifytek.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.ifytek.domain.Message;
import com.ifytek.service.RoleService;

import sun.print.resources.serviceui;

@WebServlet("/updaterole")
public class UpdateRoleServlet extends HttpServlet{
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	req.setCharacterEncoding("utf-8");  
    resp.setContentType("text/html;charset=utf-8");
    int id=Integer.parseInt(req.getParameter("id"));
    //改后的名字:
    String uprolename=req.getParameter("uprolename");
    //改之前的名字:
    String berolename=req.getParameter("berolename");
    //分配的权限的id
    String ids=req.getParameter("upmenu");
    RoleService service=new RoleService();
    Message message=service.assignRole(id,uprolename,berolename,ids);
    resp.getWriter().write(message.getMsg());
}
}

(3、)service:

public Message assignRole(int id, String uprolename, String berolename, String ids) {
		Message message=new Message();
		RoleDao dao=new RoleDao();
		Role role=null;
		int a=-1;
		if(!berolename.equals(uprolename)){
			//名字改了
			role=checkRoleByName(uprolename);
			if(role!=null && role.getId()>=0){
				//
				message.setCode(300);
				message.setMsg("改角色名称已存在");
				message.setRes(false);
				return message;
			}else{
				a=dao.updateRoleNameByName(berolename,uprolename);
			}
		}
		
		int maxid=getRolemenuMaxId();
		a=dao.assignRole(id,ids,maxid);
		if(a>=0){
			message.setCode(200);
			message.setMsg("分配角色成功");
			message.setRes(true);
		}else{
			message.setCode(300);
			message.setMsg("清除角色成功");
			message.setRes(false);
		}
		return message;
	}
(4、)dao:

public int assignRole(int id, String ids,int maxid) {
		Session session=HibernateUtil.getSessionFactory().openSession();
		Transaction transaction=session.getTransaction();
		transaction.begin();
		int a=-1;
		try{
			//先删除已经分配的角色
			String hql="delete from RoleMenu r where r.rid=?";
			Query query=session.createQuery(hql);
			query.setInteger(0, id);
			query.executeUpdate();
			//再添加权限
			String[] mids=ids.trim().split(",");
			if(mids.length>0){
				for(String ms:mids){
					maxid+=1;
					try{
						int mid=Integer.parseInt(ms);
						RoleMenu roleMenu=new RoleMenu();
						roleMenu.setId(maxid);
						roleMenu.setMid(mid);
						roleMenu.setRid(id);
						session.save(roleMenu);
						a=1;
						
					}catch (Exception e) {
						a=-1;
						break;
					}
				}
				
			}else{
				a=1;
			}
			
			transaction.commit();
		}catch (Exception e) {
			a=-1;
			transaction.rollback();
		}
		session.close();
		return a;
	}

总体思想就是先遵循easyui tree的实体规范,属性包含id、text、childen,在前台异步加载树,然后把选中节点的id以字符串拼接的方式传给后台处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
easyui是一个基于jQuery的UI框架,提供了丰富的界面组件和交互效果,方便开发人员快速构建Web页面。而treeeasyui中的一个树状组件,用于展示层级关系的数据。 在使用easyui tree进行java开发时,我们首先需要引入easyui的相关依赖包,并在页面中引入相应的脚本和样式文件。然后,我们可以通过在页面中定义一个div容器,将tree组件渲染在页面上。 在java后台代码中,我们需要提供数据给tree组件进行展示。一般来说,我们可以通过数据库查询、接口调用等方式获取数据,并将数据转换为json格式。然后,将json数据返回给前端页面,供tree组件使用。 接下来,我们需要在前端页面中初始化并配置tree组件。通过调用easyui提供的API,我们可以设置tree的数据源、展开图标、折叠图标、节点点击事件等。可以根据具体需求对tree进行自定义配置,以满足我们的业务需求。 在页面渲染完成后,easyui tree组件会自动将数据渲染为树状结构,并提供相应的交互功能,比如展开收起节点、选中节点等。我们可以通过对tree组件的事件进行监听,实现特定操作,比如点击节点后加载子节点、在节点上右键弹出菜单等。 总之,通过使用easyui tree组件,结合java后台开发,我们可以方便地实现树形结构的展示和交互操作,提升用户体验,简化开发流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

w_t_y_y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值