DHTML Tree 使用实例

Java 动态菜单实例


一.jsp页面显示菜单(最简单的树型菜单)

<%@ page language="java" contentType="text/html;charset=UTF-8"%>

<%@ include file="../includes/includeTags.jspf"%>

<HTML><HTML>

<HEAD>

<TITLE>PAS菜单</TITLE>

<LINK href="../resources/css/site.css" rel="stylesheet" type="text/css" />

<link rel="STYLESHEET" type="text/css" href="../resources/css/dhtmlXTree.css">

<script src="../resources/js/dhtml/dhtmlXCommon.js"></script>

<script src="../resources/js/dhtml/dhtmlXTree.js"></script>

<script src="../resources/js/dhtml/dhtmlXTree_start.js"></script>

<%

String id = request.getParameter("id");

request.setAttribute("id", id);

%>

</HEAD>

<BODY>

<div id="menuTree"></div>

<script>

tree=new dhtmlXTreeObject(document.getElementById('menuTree'),"100%","100%",0);

tree.setImagePath("../images/imgs/csh_winstyle/");//设置菜单图片风格路径。

//link tree to asp script

tree.setXMLAutoLoading("../menuTree.do?method=showMenu");


//load first level of tree

tree.loadXML("../menuTree.do?method=showMenu&type=root&id=<c:out value='${id}'/>");


//设置点击事件,打开对应连接页面。

tree.setOnClickHandler(doOnClick);

//tree.setOnOpenHandler(tonopen);


//设置菜单图片类型,目前有3中风格可选,也可自定义风格。

//tree.setImageArrays("plus","","","","plus_ar.gif");

//tree.setImageArrays("minus","","","","minus_ar.gif");

//tree.setStdImages("book.gif","books_open.gif","books_close.gif");


function doOnClick(nodeId){

var myUrl = tree.getUserData(nodeId,"file")

if(null != myUrl && myUrl !='#'){

parent.mainMenu.location=myUrl;

}

}

</script>

</BODY>

</HTML>

二.Action取得菜单数据,并处理菜单格式。

使用dom4j格式化数据。

public class ShowMenuAction extends PasBaseAction{


@Override

protected Class setClass() {

return this.getClass();

}

//dom4j 对象

private Document document = null;

private Element rootElement = null;

private Element prevElement = null;


public ActionForward showMenu(

ActionMapping mapping,

ActionForm form,

HttpServletRequest request,

HttpServletResponse response)throws Exception {

// a) 获取参数grpId

String xmdh = request.getParameter("id");//上级菜单编号

String type = request.getParameter("type");//根菜单类型。

//取用户

LoginUser user = getLoginUser(request);

MenuService menuSrv = (MenuService)SpringAppContext.getBean(MenuService.KEY);


//根菜单

if (null != type && type.equals("root")) {

document = DocumentHelper.createDocument();

rootElement = document.addElement("tree");

rootElement.addAttribute("id", "0");


XtbXtcd key = new XtbXtcd();//菜单对象。(下附菜单对象类)

key.setXmdh(Integer.parseInt(xmdh));

XtbXtcd rootCd = menuSrv.selectByPrimaryKey(key);//根菜单对象

addElement(rootElement,rootCd);

} else {

document = DocumentHelper.createDocument();

rootElement = document.addElement("item");

rootElement.addAttribute("id", xmdh);


//下级菜单数据集合(附带用户权限)

List menu = menuSrv.LoadUserMenuChildrens(user.getKhdxdh().toString(),xmdh);

for (Iterator it=menu.iterator() ; it.hasNext(); ){

XtbXtcd firstCd = (XtbXtcd)it.next();


//找到父菜单的element

String pareId = firstCd.getSjxm()+"";

prevElement = null;

Iterator itr = rootElement.elementIterator();

getElement(itr, pareId);


addElement(rootElement,firstCd);

}

}

//输出格式化后的数据

Writer writer = response.getWriter();

response.setContentType("text/xml; charset=GB2312");

document.write(writer);

writer.close();

return null;

}


/**

* 找到父id

* @param nodelist

* @param id

*/

private void getElement(Iterator nodelist, String id) {

if (nodelist.hasNext() == false)

return;

while (nodelist.hasNext()) {

if (prevElement != null)

break;

Element cnode = (Element) nodelist.next();

if (cnode.getNodeType() == Document.ELEMENT_NODE) {

if (id.equals(((Element) cnode).attributeValue("id"))) {

prevElement = (Element) cnode;

} else

getElement(cnode.elementIterator(), id);

}

}

return;

}


/**

* 添加item

* @param element

* @param menu

*/

void addElement(Element element,XtbXtcd menu){


Element newElement = element.addElement("item");

newElement.addAttribute("text", menu.getXmmc());

newElement.addAttribute("id", menu.getXmdh()+"");


if(!menu.isURL()){

newElement.addAttribute("child", "1");

}

addUrl(newElement,menu);

}


/**

* 添加连接

* @param element

* @param childCd

*/

void addUrl(Element element,XtbXtcd childCd){

if(childCd.isURL()){

Element urlElement=element.addElement("userdata");

urlElement.addAttribute("name", "file");

urlElement.setText(childCd.getXmdz());

}

}


public Document getDocument() {

return document;

}


public void setDocument(Document document) {

this.document = document;

}


public Element getPrevElement() {

return prevElement;

}


public void setPrevElement(Element prevElement) {

this.prevElement = prevElement;

}


public Element getRootElement() {

return rootElement;

}


public void setRootElement(Element rootElement) {

this.rootElement = rootElement;

}

}

三、菜单对象类

public class XtbXtcd {


//菜单级别分类

public final static int NODE_UNKNOW = 0;

public final static int NODE_CATALOG = 1;

public final static int NODE_URL = 2;

public final static int NODE_FUNCTION = 4;

public final static int NODE_MENU = 8;

public final static int NODE_SYSTEM = 16;


private Integer xmdh; //菜单编号 主键

private String xmmc; //菜单名称

private String xmdz; //菜单地址

private Integer sjxm; //上级菜单编号

private String cdjb; //菜单级别


//user only this to instead type of string

public boolean isMenuItem() {

return (Integer.parseInt(cdjb) & NODE_MENU) == NODE_MENU;

}


public boolean isURL() {

return (Integer.parseInt(cdjb) & NODE_URL) == NODE_URL;

}


public boolean isCatalog() {

return (Integer.parseInt(cdjb) & NODE_CATALOG) == NODE_CATALOG;

}


public boolean isFunction() {

return (Integer.parseInt(cdjb) & NODE_FUNCTION) == NODE_FUNCTION;

}


public boolean isSystem() {

return (Integer.parseInt(cdjb) & NODE_SYSTEM) == NODE_SYSTEM;

}


public Integer getXmdh() {

return xmdh;

}

。。。。下略

}


四、其他实用功能粗解

1. checkbox使用

1.1 Jsp页面设置

tree.enableCheckBoxes(1);

tree.enableThreeStateCheckboxes(true);//级联选中下级节点


//check item

tree.setCheck(id,true);

//uncheck item

tree.setCheck(id,false);

//check branch

tree.setSubChecked(id,true);

//uncheck branch

tree.setSubChecked(id,false);

//check item

tree.setCheck(id,true);

//return ids of checked items

var list=tree.getAllChecked();//取得所有选中的,不包括父

var list=tree.getAllCheckedBranches() //取得所有选中的父。父的父。。。。

var list= tree.getAllPartiallyChecked() //取得所有选中的,包括父,父的父
dhtmltree示例 一款非常优秀的js树,功能强大。资源中包含树的相关函数说明 立即下载

相关推荐

云计算学习——5G网络技术

华为eNSP网络设备模拟器的基础安装及简单使用

qq_42520799的博客 1445

一个好用的树-dhtmlXTree

dhtmlXTree是一个功能比较强大的树控件,基本上能满足大部分常规需求,比较好用。当然,在使用过程中还是发现一点点问题。下面是我整理的一些里面常用函数的说明(只有简单的说明,如果要看详细的说明,自己查看原函数去): 构造函数dhtmlXTreeObject(htmlObject, width, height, rootId)//rootId 虚拟根节点,在界面上不会显示,...

weixin_30263277的博客 319

论文笔记:Group Equivariant Convolutional Networks

Group Equivariant Convolutional Networks 1、四个问题 要解决什么问题? 对卷积神经网络进行扩展,并提出一个在特定的变换(旋转、平移等,也可表示为一个特殊的群)下具有等变性的网络。 用了什么方法解决? 提出了一种新的卷积神经网络结构——群等变卷积神经网络(Group equivariant Convolutional Neural Network)...

hongbin_xu的博客 1万+

dhtmlXTree 中文API

版本:           struts2.1.6,hibernate3.3.2,spring2.5 jar包: 环境:Struts+hibernate+spring+mysql           hibernate           Struts2              Spring              Mysql                   mysql-connector-java-5.1.8-bin.jar进行整合的代码是一个简单的注册功能本人把源代码打包上传到了优快云上大家可

路人甲的专栏 1万+

OpencvSharp学习笔记(一):图片的打开,保存灰度化,保存

近来萌生了学习OpenCv的想法,经过度娘得知老夫会的C#不能直接用OpenCv,只能用他的儿子OpenCvSharp与EmguCV,奈何奈何,这两玩意的资料少的出奇,只能慢慢的摸索了,EmguCV先不说,老夫找到了牛批的资料,先摸索OpencvSharp吧 首先打开VS通过Nuget安装 选择版本后点击安装就OK了. 安装完成后,引用里面就有以下的玩意儿了… 废话不多说了,在写程序前先 using OpenCvSharp 图片打开,灰度化,保存代码如下: static void Main(strin

猥琐de专注 7186

CMU动作捕捉数据集实战:从AMC文件到Python可视化的完整流程

本文提供了CMU动作捕捉数据集的完整实战指南,详细解析了AMC文件格式,并对比了MATLAB转换、Python原生解析及转换为BVH格式三种数据解析策略。重点介绍了如何构建Python数据处理与可视化管道,包括将数据转换为Pandas DataFrame、绘制时间序列与相关性热力图,以及实现3D骨架动画,帮助开发者高效利用这一经典动作捕获数据集进行运动分析与模型训练。

android的专栏 716

DHTML Tree 使用实例 (二)

三、菜单对象类public class XtbXtcd { //菜单级别分类 public final static int NODE_UNKNOW = 0; public final static i...

cipu7364的博客 163

从零开始:用ADS 2023手把手教你设计2.4GHz Wi-Fi LNA(基于ATF-54143,附模型文件)

本文详细介绍了如何使用ADS 2023软件设计2.4GHz Wi-Fi频段的低噪声放大器(LNA),基于ATF-54143晶体管。内容涵盖模型导入、直流工作点确定、稳定性优化、噪声匹配等关键步骤,并提供可下载的模型文件包,帮助工程师快速掌握LNA设计技巧。

weixin_42531128的博客 320

dhtml tree的使用

项目当中需要使用dhtml这个控件来进行将区域以树的形式显示。数据表结构为: 知道dhtml的都知道,dhtml有很多种方法来生成树,这里我使用的是将从数据库取出的数据以xml的方式来进行拼串,然后通过ajax请求将xml发送到客户端让dhtml处理即可。 这里的主要工作是拼串的工作,下面介绍两种方式。两种方式的不同之处在于判断每个省的结束标签何时加。 第一种(在while循环内部就加省

执行梦想代码 1391

保姆级教程:在RK3588开发板上配置USB-C PD充电(基于HUSB311芯片与DTS详解)

本文详细介绍了在RK3588开发板上配置USB-C PD充电的完整流程,重点解析了HUSB311芯片的硬件原理与DTS安全配置。通过实战案例和调试技巧,帮助开发者避免常见错误,实现稳定可靠的Type-C PD快充功能,适用于从基础开发板到工业设备的多场景需求。

weixin_42552315的博客 521

Windows10下安装VMware16虚拟机

由于本人系统为Windows 10 家庭中文版,无法安装Linux子系统WSL,虽然网上也有强制安装的方法,但为保险起见,还是把之前的VMware虚拟机重新进行安装,并浅浅记录一下安装过程。

沉香best的博客 863

把JSF组件树显示为DHTML Tree

把JSF组件树显示为DHTML Tree 作者:cagatay http://www.jroller.com/page/cagataycivici?entry=jsf_component_tree_as_a 翻译: icess http://blog.matrix.org.cn/page/icess JSF 组件由一个jsf框架核心元素 conceptual tree data structur...

withyou 160

Android Camera驱动开发工程师面试指南:技术深度与实战准备

摘要:上海移远通信招聘Android Camera驱动开发工程师,主要负责Camera传感器驱动开发维护、高通/展锐平台底层开发及技术预研。岗位要求1年以上嵌入式开发经验,精通Camera传感器驱动调试,熟悉高通平台Camera架构及Android HAL框架。具备HAL开发、算法集成或车载/支付行业经验者优先。工作内容以Driver/HAL开发为主,需具备硬件接口评估能力。该职位接受Linux/单片机背景人员转型。

郑伟强dev的专栏 280

html文档domtree结构图,DOM Tree

本词条缺少概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧!DOM是文档对象化模型(Document Object Model)的简称。DOM Tree是指通过DOM将HTML页面进行解析,并生成的HTML tree树状结构和对应访问方法。中文名文档对象化模型外文名Document Object Model简称DOM Tree方式通过DOM将HTML页面进行解析DOM ...

weixin_36125599的博客 410

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

dhtml 界面UI (tree)

1.xml的部分代码(可以使用&lt;userdata&gt;传递url): &lt;item text="Books" id="books" open="1" call="1" select="1"&gt;  &lt;item text="Mystery !!! &amp;amp; Thrillers" id="mystery&

zw7534313的专栏 184

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

DHTMLX Tree示例

前台代码: &lt;%@ Page Language="C#" AutoEventWireup="true" CodeBehind="SelectLinkman.aspx.cs" Inherits="SMSPlatform.SelectLinkman" %&gt; &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN

昕颖一角 327

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

实例 XPages 开发一个通用的 Dojo Tree 风格定制控件

本文详细介绍了如何使用 Lotus®DominoDesigner 8.5 中的 XPages 开发一个通用的 Tree View 风格定制控件,用来展现 Domino 视图的层次结构。通过本文,读者可以应用新一代的XPages技术,在基于 Domino 的 Web 应用中开发

lotusscript开发者论坛 1043

不错的xml load tree 传说中巨强的,呵呵

http://webfx.eae.net/dhtml/xloadtree/demo.html

zc2087的专栏 471

XML reffers to not existing parent error of dhtml

How to solve XML reffers to not existing parent error of dhtmlxTreeWhen I use dhtmlxTree dynamical loading with jsp, I always get the following exception: Error type: DataStructureDescription: XML ref...

结果因为如果诞生 1720

Nue框架中的Tree Shaking:减小 bundle 体积的终极指南

你是否曾为生产环境中动辄数百KB的JavaScript bundle而头疼?根据HTTP Archive 2024年数据,主流网站平均JS体积已达450KB,其中60%属于未使用的"死代码"。这些冗余代码不仅拖慢加载速度,还会导致更高的内存占用和更长的交互延迟。作为React、Vue和Svelte的替代方案,Nue框架通过创新的构建架构和智能代码分析,提供了开箱即用的Tree Shaking能力,...

gitblog_01066的博客 979

jQuery Tree 大全

转载自http://www.open-open.com/ajax/3_Tree.htm  jQuery plugin: Treeview  这个插件能够把无序列表转换成可展开与收缩的Tree。   jQuery plugin: Treeview  jQuery    jstree  jsTree是一个基于jQuery的Tree控件。支持XML,JS

散之有散 1万+

6-用过一些JS-Tree控件之后的总结【将持续更新】

转自:http://zexombie.javaeye.com/blog/148372 最近用了不少的javascript做的树控件,感受颇深啊,有些累了真的。可能是我的需求太多了吧,导致一些树控件根本无法满足要求……下面就简要的说一些树吧(作者:Zexombie,地址:zexombie.javaeye.com)大概在google里搜了国内外的以下这些树(太次的不包括):(作者:Zexombie

deadswan000的专栏 897
上一篇: 防止重复提交,提交后出现等待画面
下一篇: java生成条形码
lele521
博客等级 码龄20年 0粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值