jeasyui的树递归
来源:互联网 发布:属于网络系统安全技术 编辑:程序博客网 时间:2024/06/10 08:51
大家都知道,树, 有很多枝干,枝干下有很多分支,分支下又有很多分支.....循环往复,如果我们想得到一棵对下的所有分支信息, 我们要通过一般的循环显然是很难实现的,因为你不知道每一个分去下会有多少分支, 这是不定的, 但我们可以写程序,让程序自己去判断节点下是否还有节点.
jeasyui,自学过的也许很清楚, 获取树只需要传一个链接得到这个json数据,然后它自己会加载这棵树.以下是我做权限时,自己写的一个递归.
首先,我们需要创建一个关于树的bean,名为TreeNode
public class TreeNode {public String getId() {return id;}public void setId(String 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 Map<String, Object> getAttributes() {return attributes;}public void setAttributes(Map<String, Object> attributes) {this.attributes = attributes;}public List<TreeNode> getChildren() {return children;}public void setChildren(List<TreeNode> children) {this.children = children;}public void setIconCls(String iconCls) {this.iconCls = iconCls;}public String getIconCls() {return iconCls;}private String id; //节点标识private String text;//节点显示名称private String state;//状态,'open' or 'closed'private String iconCls; //图标样式(该插件有个样式,可以自己修改或添加图标样式,如'icon-ok')private Map<String,Object> attributes;//附加信息(该字段说明树的信息是可扩展的,你可以将一个pojo的其它数据,也附给这个对象,下面会有说明)private List<TreeNode> children;//子节点信息}演示的pojo为模块实体, 该实体,你可以改成你自己的实体,这里只做演示.
@Entity@Table(name="t_b_module")public class Module extends IdEntity { private String parentId="0"; //父模块ID,parentId值为0代表是应用即根节点,根模块 private String name; //模块名称 private String description; //模块描述 private String pic; //模块图片 private String site; //模块地址,如果是组件,则为组件标识 private String target; //打开方式1._blank 表示在新窗口中打开2. _iframe表示在框架中打开窗口 private Boolean alwaysDisplay; //是否显示 private String moduleIcon; //模块图标样式 private Long sort;//模块排序号 private String type;// 类型: 1、模块,2、组件 private String projectString;// 项目标识,同一项目使用同一标识 private Boolean isChecked; private List<Module> moduleListTemp = new ArrayList<Module>();//子模块(如未全选中,则不包含子模块的父模块) private List<Module> moduleList=new ArrayList<Module>(); //子模块 private List<Role> roles=new ArrayList<Role>();//角色映射 @Column(length=64) public String getParentId() {return parentId;}public void setParentId(String parentId) {this.parentId = parentId;} @Column(nullable=false,length=32) public String getName() { return name; } public void setName(String name) { this.name = name; } @Column(length=256) public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } @Column(length=128) public String getPic() { return pic; } public void setPic(String pic) { this.pic = pic; } @Column(length=128) public String getSite() { return site; } public void setSite(String site) { this.site = site; } @Column(length=12) public String getTarget() { return target; } public void setTarget(String target) { this.target = target; } public Boolean getAlwaysDisplay() {return alwaysDisplay;}public void setAlwaysDisplay(Boolean alwaysDisplay) {this.alwaysDisplay = alwaysDisplay;} @Column(length=128) public String getModuleIcon() {return moduleIcon;}public void setModuleIcon(String moduleIcon) {this.moduleIcon = moduleIcon;} @Column(length=128) public String getProjectString() { return projectString; } public void setProjectString(String projectString) { this.projectString = projectString; } @Column(nullable=false,length=2) public String getType() { return type; } public void setType(String type) { this.type = type; } @Transientpublic List<Module> getModuleList() {return moduleList;}public void setModuleList(List<Module> moduleList) {this.moduleList = moduleList;}@Transientpublic List<Module> getModuleListTemp() {return moduleListTemp;}public void setModuleListTemp(List<Module> moduleListTemp) {this.moduleListTemp = moduleListTemp;}@Transientpublic Boolean getIsChecked() {return isChecked;}public void setIsChecked(Boolean isChecked) {this.isChecked = isChecked;}public Long getSort() {return sort;}public void setSort(Long sort) {this.sort = sort;}public void setRoles(List<Role> roles) {this.roles = roles;}@Transient@ManyToMany(mappedBy="modules")public List<Role> getRoles() {return roles;}其实我们如果直接将数据库实体封装成树数据,也不是不可以,但如果关联关系一旦复杂了,转json的时候,递归json数据会出错, 就相当于在转圈圈似的. 以下代码即为递归树数据的主要代码, 请注意看注释.
/** * 根据父ID,得到模块树列表 */ public List<TreeNode> getAllTreeNodesById(String pid){ List<Module> modules = moduleTree(pid); //该方法可不用理会,这是内部得到数据的方法,通过父ID,得到下面的数据节点集合 List<TreeNode> treeNodes = null; if(null != modules && modules.size() > 0){ treeNodes = new ArrayList<TreeNode>(); for (Module module : modules) { TreeNode treeNode = getTreeNodeByModuleNew(module); //分别得到每个节点下的子节点集合 treeNodes.add(treeNode);} } return treeNodes; } /** * 递归模块树 * @param module * @return */ public TreeNode getTreeNodeByModuleNew(Module module){ TreeNode treeNode = new TreeNode(); treeNode.setIconCls(module.getModuleIcon()); treeNode.setText(module.getName()); treeNode.setState("close");Map<String, Object> map = new HashMap<String, Object>(); //附加数据,前台获取数据可(json对象.attributes.site)map.put("id", module.getId());map.put("pid", module.getParentId());map.put("site", module.getSite());treeNode.setAttributes(map);List<Module> modules = moduleTree(module.getId()); //得到子节点集合List<TreeNode> treeNodes = new ArrayList<TreeNode>();for (Module m : modules) {TreeNode tn = getTreeNodeByModuleNew(m); //循环子节点,得到子节点下的孙节点集合,调用本身,可一直向下递归,直到modules为空treeNodes.add(tn);}treeNode.setChildren(treeNodes); //添加封装好数据的子节点集合return treeNode; }
自己写出了这个递归,真的好开心,跟大家分享一下. 前台的代码我就不贴了, 用以上代码,可实现树的无限级显示.如不懂或有建议,可留言.亲,下一章还有ztree的讲解哦,都是差不多的.
- jeasyui的树递归
- jeasyui
- jeasyui
- jeasyui的datagrid初始查询条件
- jeasyUI的treegrid批量删除多行
- jeasyUI treegrid 的 reload 和 getChanges
- jeasyui插件扩展datagrid-filter的改善
- Spring+MyBatis+jeasyui 功能树列表
- 基于jeasyui的遮罩扩展[修复链式bug]
- jQuery 在 jeasyui 中无法取值的解决办法
- jEasyUI 中文版
- (1)、JEasyUI 之datagrid的Combobox显示textField值的问题
- (1)、JEasyUI 之 Datagrid的Combobox 显示 textField 值的问题
- jeasyui 造成$.data(...) is undefined报错的原因及解决
- jeasyui datagrid 常用操作
- jeasyui下载地址
- jeasyui.extensions.tree.js
- http://www.jeasyui.net
- Linux驱动学习笔记之一——高精度定时器(2)
- Tomcat7安装(jdk 1.7环境)
- Makefile 经典教程
- ssh连接vmaere中的linux
- 从AMD和ARM合作看业界的趋势
- jeasyui的树递归
- Java程序设计(十一)----计算的窗口求和求平均值
- Project Euler problem 26 分数化小数
- 命名空间和头文件(转)
- 统计学书籍
- 豆豆。。。豆豆。。。
- 原子性和线程安全
- c/c++数据类型
- 吊兰