调用代码:
StringBuffer menus=new StringBuffer();
List<EsbAdminMenuInfo> list=menuServiceImpl.getAll();
buildChildMenu(list,0L,menus);
return menus.toString();
递归代码:
/**
* 递归生成菜单结构
* @param list 所有的菜单集合
* @param parentNoteId 菜单父节点
* @param menus 追加节点
* */
public void buildChildMenu(List<EsbAdminMenuInfo> list,Long parentNoteId,StringBuffer menus){
List<EsbAdminMenuInfo> nodes=new ArrayList<EsbAdminMenuInfo>();
//查找参数parentNoteId与集合中对象的parentNoteId相同的菜单对象
for(EsbAdminMenuInfo mi : list){
if(mi.getParentMenuId()==parentNoteId){
nodes.add(mi);
}
}
for(int i = 0; i<nodes.size(); i++){
EsbAdminMenuInfo mi =nodes.get(i);
if(mi.getParentMenuId()==0||mi.getUrl()==null||"".equals(mi.getUrl())){
//父节点
menus.append("<div class='parent'><div class='padding'>").append(mi.getMenuName()).append("</div></div>");
}else if(mi.getUrl()!=null&&!"".equals(mi.getUrl())){
//只要是子节点第一次就添加<div class='subMenus'> 并记录有一个子节点
if(i==0){
countSubMenu++;
menus.append("<div class='subMenus'>");
}
menus.append("<div class='action'><div class='padding'>").
append("<a href='").append(mi.getUrl()).append("' target='context'>").append(mi.getMenuName()).append("</a></div></div>");
//结束最外面的<div class='subMenus'>
if(i==nodes.size()-1){
for(int j=0;j<countSubMenu;j++){
menus.append("</div>");
}
//每次到了最大的父节点 初始化它的子节点数量
countSubMenu=0;
}
}
buildChildMenu(list,mi.getMenuId(),menus);
}
}
分享到:
相关推荐
本文将深入探讨如何使用EasyUI递归生成菜单树,并结合前后台代码来实现这一功能。 首先,让我们了解菜单树的基本概念。菜单树是一种以树形结构展示数据的控件,通常用于表示层次关系的数据,如网站导航、文件系统或...
this.RecursiveTree1.DataTextField("菜单配置","Menu_ID", "Menu_ParentID", "Menu_Name", "Menu_Url", "Menu_Name","",""); 具体重载方法 说明 添加引用后,控件名.点 自行查看... //这里改写成你的数据库链接.. ...
传统的实现方式通常使用递归算法,但这种方法可能会导致内存消耗过大,尤其是在菜单层级很深的情况下。本主题介绍了一种不依赖递归的高效方法来创建无限级树型菜单,具有快速加载的特点。 首先,我们来看`WriteXML....
3. **递归渲染**:在Vue组件中,我们可以利用`v-for`指令和递归组件来渲染无限层级的菜单。首先创建一个递归组件`MenuNode`,它接收一个`MenuItem`作为props,并在自身内部渲染菜单项及其子项: ```javascript !...
本文将详细讲解如何使用递归方法创建一个无限级的树形菜单,特别适合初学者掌握。 首先,我们要理解树形菜单的基本概念。树形菜单是由节点(节点通常代表一个菜单项)组成的,每个节点可以有零个或多个子节点,形成...
在原有的基础上进行二次修改,通过ajax请求,获取json数组,迭代json数组生成多层级的数据字典。当前例子中数据源为模拟的json数据。当然该方法是支持无限级父子关系。修改之前的源码均来自网上,本人只是对当前做了...
在这个上下文中,递归可能被用来遍历和构建菜单结构,每次调用都会处理一个菜单级别,并生成对应的子菜单项,直到没有更多的子菜单为止。 压缩包内的文件名列表揭示了实现这一功能可能涉及的技术和组件: 1. **Web....
// 递归生成子节点 } } } ``` 在实际应用中,我们通常会有一个根节点,初始化时调用`generateTree(rootNode, 0)`,这样就会开始生成整个树结构。为了展示树数据,我们可以提供一个递归的`printTree`方法,逐层...
4. JavaScript处理后端返回的JSON数据,动态生成菜单DOM结构。 5. 实现菜单的展开/折叠逻辑,确保用户体验流畅。 在实际项目中,你可能会遇到性能优化、权限控制、国际化支持等问题,这些都是在构建此类功能时需要...
综上所述,"无限级树形菜单 动态生成"项目结合了VS2005的Web开发能力和Sql2000的数据管理功能,实现了在Web页面上展示可动态扩展的、无限层级的菜单系统。这样的系统在网站导航、文件系统、组织架构展示等多个场景...
- **`FillTable()`方法**:此方法是实现无限递归的关键,其参数包括数据表、所有类型的数据列表和当前节点的父ID。它通过查找所有具有指定父ID的类型,将这些类型添加到数据表中,并对每个子类型再次调用自身,形成...
6. **无限下拉菜单**:在前端展示无限分类时,可以利用JavaScript和CSS创建无限级的下拉菜单,用户可以通过展开和折叠来查看不同级别的分类。 7. **wxtree**:这个文件可能是一个用于前端显示的树形结构的代码,...
总的来说,这个项目结合了多种技术,利用Struts2处理请求,Spring进行依赖管理和事务控制,Hibernate处理数据,Freemarker生成动态页面,jQuery提供前端交互,而jquery-treeview则提供了树形菜单的可视化。...
4. **递归函数**:为了实现无限级别的多级菜单,通常会使用递归函数。递归允许我们处理具有自我相似结构的数据,例如树形结构的菜单。函数会检查每个菜单项是否有子菜单,如果有,则继续调用自身来处理子菜单。 5. ...
在实际应用中,这个系统可能还会包括其他功能,比如添加、删除和编辑类别,或者根据需要动态生成菜单。`jquery-1.6.1.min.js`是一个JavaScript库,可能用于增强用户界面,例如实现异步加载分类、交互式菜单等。 总...
创建菜单时,我们需要根据类别层级生成相应的`<ul>`和`<li>`元素,并附加到页面上。 4. **事件处理**:为了让菜单具有交互性,我们需要添加事件监听器,比如点击事件。当用户点击菜单项时,可以展开或折叠其子菜单...
'递归调用,生成子类别菜单 GenerateMenu categoryID Response.Write("</li>") rs.MoveNext Loop End If rs.Close End Function ``` 在上述代码中,`conn` 是数据库连接对象,`GenerateMenu` 函数接收...
无限级树形菜单意味着菜单可以有任意多的子级,且在运行时能够根据数据库中的数据动态生成。下面我们将深入探讨如何实现这一功能。 首先,我们需要理解无限级树形菜单的基本概念。一个树形结构是由节点(在菜单中...
在数据库设计中,无限级分类是一种常见的需求,例如在网站导航菜单、组织结构或产品类别等场景下。传统的递归方法虽然能实现无限级分类,但随着层级加深,性能会逐渐下降。为了解决这个问题,我们可以采用非递归的...
- **数据获取**:在ASP.NET中,可以使用服务器端代码生成JSON格式的数据,其中包含了菜单项及其子项的信息。这可以通过递归遍历数据库中的菜单表来实现。 - **数据解析**:在客户端,JavaScript接收并解析这个JSON...