早就想写一个自己的动态树了,网上也能找到很多,可始终是别人实现的。以前一直没时间,这不年底了,工作任务也完成了,闲着没事就写了这个东西,和大家分享一下
一.设计思想:
1.布局css+div:好处就不多说了
2.利用ajax,当点击树中某个节点时才生成其子节点,这样能避免了客户端一次性加载整棵树,执行速度快
3.树的生成用java控制而不是像Dtree的实现是用javascript实现,dtree实现的js代码看了你都会头晕,而且这种树是一次性加载,如果你想利用异步请求(ajax)获得一个树,那么实现起来相当麻烦。因为异步请求后执行是在服务器端执行的,js又不能在服务器端执行。但如果数是用java实现就不一样了,呵呵。
4.本程序实现分四层:视图层tree.jsp,treeAction.jsp(可以在通过控制层实现);业务层com.tree.biz.TreeBiz;数据持久层用hibernate,数据库层用mysql
二。数据设计:
很明显,运用表内关联是不错的选择,有多种实现方式,我设计了个parid字段用于标识父级id(也可以通过编号来控制,01,01001,01002的形式,具体根据项目的需求来定)建库脚本如下:
************************************数据脚本 start********************************
/*
SQLyog Enterprise - MySQL GUI v5.02
Host - 4.0.18-nt : Database - template
Server version : 4.0.18-nt
*/
create database if not exists `template`;
USE `template`;
/*Table structure for table `tree_demo` */
DROP TABLE IF EXISTS `tree_demo`;
CREATE TABLE `tree_demo` (
`id` bigint(20) NOT NULL auto_increment,
`item_num` varchar(20) default NULL,
`item_name` varchar(50) default NULL,
`item_parId` bigint(20) default '0',
PRIMARY KEY (`id`)
) TYPE=MyISAM;
/*Data for the table `tree_demo` */
insert into `tree_demo` values
(1,'','一级菜单1',0),
(2,'','一级菜单2',0),
(3,'','一级菜单3',0),
(4,'','一级菜单4',0),
(5,'','一级菜单5',0),
(6,'','二级菜单11',1),
(7,'','二级菜单12',1),
(8,'','二级菜单13',1),
(9,'','三级菜单121',7),
(10,'','三级菜单122',7),
(11,'','三级菜单123',7),
(12,'','三级菜单124',7),
(13,'','二级菜单21',2),
(14,'','二级菜单22',2);
<