我对每个系统都分配了一个唯一的系统号,每个系统的下的菜单和它的子菜单的命名也按一定的规律
如果系统分配了3位数, 如100, 101
它的菜单对应于: 100系统的菜单10001, 10002, 10003, 1000101, 100010102....
使用dhtmlxtree它的实节点很容易获取到,但是它的虚节点获取时有点问题(采用某种方式时)
因此通过它的实节点获取到它对应的虚节点
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.clarancepeng;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
*
* @author pqs
*/
public class TyMenu {
private Collection<QxVo> getMenuList() {
//String ids_ = "1060204,106020401,10602040101,1060205,106020501,10602050101,106020502,10602050201,1060206,106020601,10602060101,10602060102,10602060103,10602060104,1060207"; //"10602,1060201,106020101,10602010101,106020102,10602010201,10602010202,10602010203,10602010204,106020103,10602010301,106020104,10602010401,1060202,106020201,10602020101,10602020102,10602020103,10602020104,1060203,106020301,10602030101,10602030102,10602030103,10602030104,1060204,106020401,10602040101,1060205,106020501,10602050101,106020502,10602050201,1060206,106020601,10602060101,10602060102,10602060103,10602060104,1060207";
String ids_ = "100010203,100010204,1000102,1000204,1000205,1000203,10301,103,10302,103020103,1030101,1030102,1000402,10705040605,1001028,10402020507";
String[] str = ids_.split(",");
String[] str2 = getOhterMenu(str);
System.out.println("-----------------------------------------------------------");
Arrays.sort(str2);
for(String s : str2) {
System.out.println(" " + s);
}
List<QxVo> list = new ArrayList<QxVo>();
if(str != null)
{
for(String s : str){
if(!"".equals(s) && s!=null)
{
QxVo vo = new QxVo();
vo.setRlid("abc");
vo.setPrvid(s);
vo.setLbl("0");
list.add(vo);
}
}
}
return list;
}
/**
* 首先对获取的节点进行排序
* 1. 如果他们的祖先已经被选择了,则他们的儿子及孙子等都不用再做判断了(只判断为3位数的顶级节点)
* 2. 如果他们的父亲已经被选择了,则此节点不用再做判断了
* 3. 如果相邻的两个节点有共同的父亲,后面的一个节点就不用判断了
* @param strArr
* @return
*/
private String[] getOhterMenu(String[] strArr) {
if(strArr == null || strArr.length == 0) return strArr;
List<String> menuList = Arrays.asList(strArr);
Collections.sort(menuList);
//祖先节点
String ancestorNode = null;
Set<String> otherMenu = new HashSet<String>();
String parent = null;
//上级菜单
String upperMenu = "";
String befores = "";
for(String s : menuList) {
System.out.println(" " + s);
if(s != null && !"".equals(s)) {
if(s.length() == 3) {
ancestorNode = s;
}
else if(s.length() > 3) {
if(ancestorNode != null
&& s.startsWith(ancestorNode)) {
//祖先已经被选节点
continue;
}
else {
ancestorNode = null;
if(s.substring(0, s.length() -2).equals(parent)) {
//同父节点
continue;
}
else {
if(befores.length() < s.length()) {
upperMenu = befores;
}
else if(befores.length() > s.length()) {
upperMenu = s;
}
parent = s.substring(0, s.length() -2);
//System.out.println("parent= " + parent );
//父节点已经被选择,不必在做添加
if(parent.equals(upperMenu)) {
continue;
}
if(!menuList.contains(parent)) {
otherMenu.add(parent);
}
String temp = parent;
while(temp.length() > 3) {
temp = temp.substring(0, temp.length()-2);
if(!menuList.contains(temp)) {
otherMenu.add(temp);
}
}
}
}
}
}
befores = s;
}
return otherMenu.toArray(new String[0]);
}
public static void main(String[] args) {
TyMenu tyMenu = new TyMenu();
tyMenu.getMenuList();
}
}
class QxVo implements Serializable
{
/**
*
*/
private static final long serialVersionUID = -4622465980226296915L;
private String rlid;
private String prvid;
private String lbl;
public String getPrvid()
{
return prvid;
}
public void setPrvid(String prvid)
{
this.prvid = prvid;
}
public String getRlid()
{
return rlid;
}
public void setRlid(String rlid)
{
this.rlid = rlid;
}
/**
* @return Returns the lbl.
*/
public String getLbl()
{
return lbl;
}
/**
* @param lbl The lbl to set.
*/
public void setLbl(String lbl)
{
this.lbl = lbl;
}
}
分享到:
相关推荐
一般来说,你会在`onRightClick`事件处理函数中创建一个新的菜单实例,然后将定义好的菜单项添加进去。 4. **显示菜单**:菜单创建后,需要将其定位到用户点击的位置。这通常涉及到计算鼠标点击的坐标,并设置菜单...
【标题】"dhtmlxtree的一个实用demo"指的是一个基于dhtmlxtree的示例应用,这个示例可能展示了如何在网页中实现交互式的树形数据结构,用于展示层次化的信息,比如目录结构、组织架构或者权限管理等。dhtmlxtree是一...
JS 带右键菜单的目录树 dhtmlxtree+proto.menu 分权限 JS 带右键菜单的目录树 dhtmlxtree+proto.menu 分权限 图片预览 ...
综上所述,dhtmlxtree是一个专注于创建权限树和交互式菜单的JavaScript库,它提供了一套完整的解决方案,包括前端展示、后端交互以及丰富的示例和文档,适用于需要进行权限管理的Web应用程序开发。开发者可以通过...
dhtmlxtree 是一个流行的JavaScript库,用于创建交互式的树形数据结构,广泛应用于网站和Web应用程序中,用于展示层次化的信息。其强大的功能之一是支持右键菜单,这使得用户可以通过鼠标右键点击节点来执行各种操作...
dhtmlxTree 是一个功能强大的 JavaScript 库,用于创建基于 Ajax 的树形菜单。它支持多种特性,如在线编辑、拖拽操作、复选框模式(包括全选、不选和半选状态)等,并且在处理大量数据时仍能保持高效的性能。...
artDialog是一个基于javascript编写的对话框组件,它拥有精致的界面与友好的接口,非常出色。但在项目开发中,一些细节方面、框架调用、模块集成以及与IE6的兼容问题等都有一些地方需要注意和完善。该实例中集成的...
1. **添加右键菜单**:首先,你需要创建一个包含菜单项的JSON对象,每个菜单项包含ID、文本、图标等属性。然后,通过调用dhtmlxtree的`attachEvent`方法,监听树节点的`onContext`事件,这会在用户右击节点时触发。...
例如,在一个项目管理应用中,可以使用dhtmlxtree展示任务的层级关系,通过拖放调整任务顺序,通过复选框选择多个任务,通过右键菜单进行任务的增删改操作。 **六、API与配置选项** dhtmlxtree提供了丰富的API接口...
XML文件通常包含一系列`<tree>`或`<item>`标签,每个标签代表一个树节点,包含ID、文本、图标以及子节点等信息。例如: ```xml <tree> 父节点1"> 子节点1.1"/> 子节点1.2"/> 父节点2"/> </tree> ``` **二、...
对dhtmlXTree进行一个小的扩展 需求1: 动态生成树形菜单,每个节点都有各自的URL地址,单击不同的节点框架页的右侧跳转到该节点所对应的URL。(框架页说明:左边是树形菜单;右边是显示页面相应信息的页面) 分析...
在这个特定的例子"drag-drop-folder-tree.zip_ajax_dhtmlxtree_dr_drop_tree_tree_ja"中,开发者利用JavaScript的特性实现了一个拖放功能,这在AJAX(Asynchronous JavaScript and XML)开发中非常常见。AJAX允许...
总的来说,Dhtmlxtree是一个强大且灵活的JavaScript树形控件,通过XML数据的加载,可以方便地构建出具有多层次结构的界面元素,适用于各种类型的Web应用。这个例子展示了其基础用法,但Dhtmlxtree的强大之处远不止于...
通过监听这些事件,可以实现节点操作的回调函数,例如,当用户点击一个节点时执行特定的操作,或者在节点展开时加载其子节点的数据。 **5. 扩展功能** dhtmlxTree 2.1可能包含了对Ajax支持的改进,允许更流畅的数据...
dhtmlxtree是一款基于JavaScript的开源树形菜单控件,专为Web开发人员设计,用于在网页中构建交互式、可扩展的树状结构。它提供了丰富的功能和自定义选项,使得用户界面更加直观和易于操作。这款专业版dhtmlxtree在...
**dhtmlXTree1.6** 是一个基于JavaScript的组件,用于在Web应用程序中创建交互式的树状结构。这个组件允许开发者以动态和灵活的方式展示层次化的数据,常见于网站的导航菜单、文件系统或者组织架构等场景。...