外贸网站优化谷歌关键词排名外包,学校官网,线上营销渠道,广州网站设计哪家公司好开发工具#xff1a;MyEclipse 10
后台框架#xff1a;Hibernate Struts2
数据库#xff1a;Oracle 11g
前台框架#xff1a;EasyUi
浏览器#xff1a;谷歌 在开发中我们经常会遇到左边是树形菜单#xff0c;右边是一个显示列表#xff0c;单击左边的树形菜单项时MyEclipse 10
后台框架Hibernate Struts2
数据库Oracle 11g
前台框架EasyUi
浏览器谷歌 在开发中我们经常会遇到左边是树形菜单右边是一个显示列表单击左边的树形菜单项时右边会显示该菜单里面相对应的内容。那么左边的树形菜单怎么从数据库里面获取数据在遍历实现呢我们不妨来看看设计思路。 一个良好的思路是离不开一个设计完美的数据表那么我们来想想这个数据表怎么设计呢 先来明确一下思路我们要用到什么内容 1.当前菜单的编号,我们设为id不管是在哪个节点上赞同的朋友们继续往下看 2.既然编号都有了我们要显示出来不能光有个编号吧只显示出来1 2 3 .......之类的肯定不靠谱我们得显示文字也就是各个编号所对应的文字。我们设为text 3.当前的的菜单在哪一节点呢我们如何来区分呢大家肯定会想到直接用主外键关联起来OK这就好说了我们在设置个pid作为每个节点的父id父id的含义大家肯定都懂就是当前的节点的父目录是哪个用这个pid来区分。 4.nice现在有了上面的字段是不是就够了呢还不够咱们得再加一个字段那就是等级levels这个等级是来区分当前节点是属于二级呢还是二级的儿子或者二级的孙子再或者三级的孙子等等。 我们现在随便举个例子大家请看 1.功能菜单 1-1.系统管理 1-2.用户管理 1-2-1.个人信息 1-2-2.投票记录 1-3.投票管理 1-3-1.维护 1-3-2.发布新投票 1-3-3.所有投票
简要说明一下这个案例 可以看到一级菜单是功能菜单他有三个儿子分别是系统管理用户管理投票管理。既然有儿子那么有孙子是迟早的事可以看到功能菜单一共有5个孙子。其中老大系统管理没儿子老二用户管理有两个儿子个人信息和投票记录老三投票管理有3个儿子维护、发布新投票和所有投票。 我们接着来分析一下数据表 id text pid levels 1 功能菜单 0 0 2 系统管理 1 1 3 用户管理 1 1 4 个人信息 3 2 5 投票记录 3 2 6 投票管理 1 1 7 维护 6 2 8 发布新投票 6 2 9 所有投票 6 2
对照上面的分析相信大家都看理解了这个案例了吧
这里我们只写分析思路不写代码源码我会附在文章的最后供大家分享的
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
接着我们分析怎么在java中实现。 我们这里用到一个前端插件easyuieasyui的 tree有不懂的可以去百度问问。一搜一大堆这里就不过多的阐述了。 那么怎么实现呢 【注意下面所用到的查询语句均为hql语句,VoteTree是实体类名】 1:我们先查询出最小的levels也就是根目录对应案例中的长辈功能菜单 Integer minLevel select min(levels) from VoteTree; 2:根据最小level查询所有一级目录 对应案例中长辈的儿子3个 1-1.系统管理 1-2.用户管理 1-3.投票管理 ListVoteTree ts from TreeVote where levesminLevel 3遍历一级目录集合 ts foreach(VoteTree tr : ts){ 根据1级目录ID查找所有子集 getNextLevels(tr.getId) ListVoteTree tNextLevelgetNextLevels(tr.getId); tr.setTrees(tNextLevel) } 4: listVoteTree getNextLevels(tr.getId)方法实现 select count(id) from table where pidtr.getId 保存为总数totoal 5:判断totoal listTreeVote nextLevel from table where pid tr.getId listTreeVote getNextLevels(tr.getId){ listTreeVote tvs getDeeptLevel(tr.getId); }
下面我们就用到一个递归 遍历所有的子节点也就是找孙子; 1-2-1.个人信息 1-2-2.投票记录 1-3-1.维护 1-3-2.发布新投票 1-3-3.所有投票 listTreeVote getDeeptLevel(TreeVote tvote){ listTreeVote list from VoteTree where pid tvote.getId if(list.size0){ tvote.add(list); for(int i0;ilist.size();i){ getDeeptLevel(list[i]); } }
分析了这么大半天估计就有人看蒙圈了那么我来吧代码实现放上来简单暴力直接看 1.创建数据库以及添加数据库【点击这里】 2.实体类VoteTree【点击这里】 3.实体类对应的映射文件 VoteTree.hbm.xml【点击这里】 4.Dao层的接口和实现类 IVoteTreeDao IVoteTreeDaoImpl 【点击这里】 5service层接口和实现类IVoteTreeService VoteTreeServiceImpl【点击这里】 6.HibernateUtil实现类【点击这里】 7.TreeAction实现【点击这里】 8.OpenSessionView 的实现【点击这里】 9.struts.xml实现【点击这里】 10.index.jsp的实现【点击这里】
easyui的环境搭建大家自己实现以下吧我这里就不细说了。那个也很简单整体目录如下所示 欢迎多多评论多多留言不足地方还请业内高手指点鸣谢