一个jQuery EasyUI tree+Struts2+MyBatis例子
2014-03-25 23:55
267 查看
效果:
前台代码,没什么好说的,照搬官方文档的。采用异步加载子节点的方式,展开一个节点时把这个节点的id传到后台,获取该节点的子节点。
按照官方文档的说明,后台方法传回的json数组必须是下面这种形式,数据才能帮到tree上。
TreeNode类代码如下:
测试用的实体类:
MyBatis的mapper:
因为要返回json数组,所以在struts.xml里做相应的配置:
Action类代码:
页面加载时后台返回的数据:
效果:
展开第一个节点时后台返回的数据:
效果:
前台代码,没什么好说的,照搬官方文档的。采用异步加载子节点的方式,展开一个节点时把这个节点的id传到后台,获取该节点的子节点。
<%@ 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>Insert title here</title> <link rel="stylesheet" type="text/css" href="js/themes/icon.css"/> <link rel="stylesheet" type="text/css" href="js/themes/default/easyui.css"/> <script type="text/javascript" src="js/jquery-2.0.3.js"></script> <script type="text/javascript" src="js/jquery.easyui.min.js"></script> <script type="text/javascript"> $(document).ready(function(){ $('#tree').tree({ url: "json_getNodes.action", checkbox:true, loadFilter: function(data){ if (data.treeNodes){ return data.treeNodes; } else { return data; } } }); }); </script> </head> <body> <ul id="tree" class="easyui-tree"></ul> </body> </html>
按照官方文档的说明,后台方法传回的json数组必须是下面这种形式,数据才能帮到tree上。
[{ "id": 1, "text": "Node 1", "state": "closed", "children": [{ "id": 11, "text": "Node 11" },{ "id": 12, "text": "Node 12" }] },{ "id": 2, "text": "Node 2", "state": "closed" }]其中的id、text、state和children都是tree中节点的属性。id是节点的编号,这个例子里使用的是数据库表的主键;text是节点上显示的文本;state是节点的状态,默认是打开;children是节点的子节点。为了符合tree的要求,我建立了一个TreeNode类来对应这些属性。
TreeNode类代码如下:
public class TreeNode { private Integer id;//节点编号 private String text;//节点文本 private String state="closed";//节点状态 private List<TreeNode> children=new ArrayList<TreeNode>();//子节点集合 public TreeNode() {} public TreeNode(Integer id, String text) { this.id = id; this.text = text; } public Integer getId() { return id; } public void setId(Integer 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; } public List<TreeNode> getChildren() { return children; } public void setChildren(List<TreeNode> children) { this.children = children; } }
测试用的实体类:
public class Privilege implements Serializable { private static final long serialVersionUID = -104941301217905290L; private Integer id;//权限编号 private String name;//权限名称 private Integer level;//权限层级 private Integer parentId=0;//上级权限 public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getLevel() { return level; } public void setLevel(Integer level) { this.level = level; } public Integer getParentId() { return parentId; } public void setParentId(Integer parentId) { this.parentId = parentId; } }
MyBatis的mapper:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="Privilege"> <resultMap type="easyui.entity.Privilege" id="privilegeResultMap"> <id property="id" column="id"/> <result property="name" column="name"/> <result property="level" column="level"/> </resultMap> <!-- 用上级权限编号查权限 --> <select id="selectByParentId" resultMap="privilegeResultMap" parameterType="int"> select p.id,p.name,p.level from privilege p where p.parentId=#{parentId} </select> </mapper>
因为要返回json数组,所以在struts.xml里做相应的配置:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd" > <struts> <package name="Json" extends="json-default"> <action name="json_*" class="easyui.action.JsonAction" method="{1}"> <result type="json"> <param name="root">result</param> </result> </action> </package> </struts>
Action类代码:
package easyui.action; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import easyui.entity.Node; import easyui.entity.Privilege; import easyui.entity.User; import easyui.util.TreeNode; @SuppressWarnings("serial") public class JsonAction extends BasAction<User>{ private Map<String, Object> result=new HashMap<String, Object>(); public Map<String, Object> getResult() { return result; } public void setResult(Map<String, Object> result) { this.result = result; } public String getNodes(){ //声明一个变量储存前台传递的节点编号 int id=0; //如果key为id的参数不为空 if(parameters.get("id")!=null){ //把key为id的参数的第一个值放在id中 id=Integer.parseInt(parameters.get("id")[0]); } //建立一个TreeNode类集合存放节点 List<TreeNode> treeNodes=new ArrayList<TreeNode>(); //查询上级权限编号等于id的权限 List<Privilege> privileges=sqlSession.selectList("selectByParentId", id); //遍历查询结果 for(Privilege privilege:privileges){ //实例化TreeNode类对象 TreeNode treeNode=new TreeNode(privilege.getId(), privilege.getName()); //如果当前遍历到的权限没有下级权限 if(sqlSession.selectList("selectByParentId", privilege.getId()).size()<1){ //设置节点状态为打开 treeNode.setState("open"); } //把节点放入集合中 treeNodes.add(treeNode); } result.put("treeNodes",treeNodes); return SUCCESS; } }
页面加载时后台返回的数据:
{"treeNodes":[{"children":[],"id":1,"state":"closed","text":"系统管理"},{"children":[],"id":40,"state":"closed","text":"审批流转"},{"children":[],"id":41,"state":"closed","text":"实用工具"}]}
效果:
展开第一个节点时后台返回的数据:
{"treeNodes":[{"children":[],"id":4,"state":"closed","text":"部门管理"},{"children":[],"id":5,"state":"closed","text":"岗位管理"},{"children":[],"id":6,"state":"closed","text":"用户管理"}]}
效果:
相关文章推荐
- jquery easyui tree动态加载-服务端struts返回json数据
- jquery的ajax返回json数据另外一个例子(不继承json-default)
- Spring Boot + Spring Cloud + Mybatis 互相调用的一个小例子
- 【转载】一个通过JSONP跨域调用WCF REST服务的例子(以jQuery为例)
- 使用Jquery+EasyUI进行框架项目开发案例解说之中的一个---员工管理源代码分享
- 一个简单的jQuery插件ajaxfileupload.js实现ajax上传文件例子
- mybatis入门之一个简单的mybatis例子(根据id查数据)
- 一个通过JSONP跨域调用WCF REST服务的例子(以jQuery为例)
- 初学Struts 2创建一个Hello World例子(xml版)
- 使用Jquery+EasyUI进行框架项目开发案例解说之中的一个---员工管理源代码分享
- 使用Jquery+EasyUI进行框架项目开发案例解说之中的一个---员工管理源代码分享
- 关于easyui模拟win2012桌面的一个例子系列
- Struts1环境搭建并演示一个小例子
- 一个jQuery模板插件的测试例子--boilerplate模板插件测试
- jquery easyui tree异步加载子节点
- jquery easyui tree控件复选框选择处理
- JQuery EasyUI Tree和tab右键菜单实现
- 一个通过JSONP跨域调用WCF REST服务的例子(以jQuery为例)
- 一个struts+spring的例子
- 学习struts的一个初等的小例子