`
songjindian
  • 浏览: 75600 次
  • 性别: Icon_minigender_1
  • 来自: 河南
文章分类
社区版块
存档分类
最新评论

<s:select>无限树级菜单的实现

 
阅读更多

最近在做一个公安的项目,因为部门比较多,并且存在无限级的子部门,子子部门…………,所以在显示部门的时候要求以无限树级的形式来显示这个部门的信息。在数据库设计的时候有个部门表,部门表里面有个parentId的字段来说明部门和子部门的关系。需求摆在这,绞尽脑汁,终于想出来了使用递归的方式来实现了,下面是自己递归封装list的代码,与大家共享:

 public List<GroupInfo> listGroupInfo(int compyId,int type,User user){
   DBConn db = null;
		
 List<GroupInfo> groupInfos= new ArrayList<GroupInfo>();
		
  try{
       db = new DBConn();

         String   strSQL   =   "select * from groupInfo where compyId="+compyId+" and type="+type+" and ParentId=0";
		
       if(user.getGrade()>0){
			
			strSQL = strSQL+" and groupId="+user.getGroup().getGroupId()+"";
			
		}
		
		ResultSet rs = db.OpenSql(strSQL);
			String str = "—";
		 while(rs.next()){
			 
			 GroupInfo groupInfo = new GroupInfo();
			 
			 groupInfo.setGroupId(rs.getInt("groupId"));
			 groupInfo.setGroupName(str+rs.getString("groupName"));
			 groupInfo.setMemo(rs.getString("memo"));
			 groupInfo.setType(rs.getInt("type"));
			 groupInfos.add(groupInfo);
			 //递归调用
			 groupInfos.addAll(goback(compyId,type,rs.getInt("groupId"),db,str)) ;
			  
		 }
	    	  
	       logger.info("list groupInfo by compyId success!compyId="+compyId+",type="+type);

		} catch (Exception e) {

			logger.error("list groupInfo by compyId failed!compyId="+compyId+",type="+type,e);

			System.out.println(e);

		} finally {

			db.close();
		}

		return groupInfos;
		
	}
  public List<GroupInfo> goback(int companyId,int type,int groupId,DBConn db,String str){
		
		String   strSQL9  =  "select * from groupInfo where compyId="+companyId+" and type="+type+" and ParentId=?";
		List<GroupInfo> list = new ArrayList<GroupInfo>(); 
		PreparedStatement pst=null;
		
		try {
		
		pst = db.getConn().prepareStatement(strSQL9);
			
		pst.setInt(1, groupId);
		
		ResultSet rs8 = pst.executeQuery();
		while(rs8.next()){
			 
			GroupInfo groupInfo = new GroupInfo();
			 str = str + "—";
			 groupInfo.setGroupId(rs8.getInt("groupId"));
			 groupInfo.setGroupName(str+rs8.getString("groupName"));
			 groupInfo.setMemo(rs8.getString("memo"));
			 groupInfo.setType(rs8.getInt("type"));
			 list.add(groupInfo);
			 //递归调用
			 list.addAll(goback(companyId,type,rs8.getInt("groupId"),db,str));
			logger.info("list groupInfo by compyId success!递归成功!compyId="+companyId+",type="+type);
			 
		}
	} catch (SQLException e) {
		// TNODO Auto-generated catch block
		e.printStackTrace();
	}
	
	return list;
  }

前台显示的就是就是一个<s:select>标签。 

这里面就是使用了递归来实现的无限级的树形菜单。

分享到:
评论

相关推荐

    无限级别动态树形菜单

    本文将围绕“无限级别动态树形菜单”的实现展开讨论,包括其基本概念、实现原理以及具体的代码示例等内容。 #### 二、基础概念 1. **树形菜单**:一种按照树状结构展示数据的菜单形式。每个节点可以拥有任意数量的...

    JS实现下拉菜单

    &lt;button class="dropbtn"&gt;&lt;i class="fas fa-caret-down"&gt;&lt;/i&gt; 菜单&lt;/button&gt; ``` 最后,不要忘记考虑移动设备的适配,确保下拉菜单在不同屏幕尺寸下都能正常工作。你可以使用媒体查询(media queries)或响应式框架...

    c程序课程设计第五章实验

    - **包含标准库**:这里包含了必要的标准库文件,如 `&lt;stdio.h&gt;` 用于输入输出,`&lt;math.h&gt;` 提供数学函数等。 - **函数声明**:声明了程序中需要用到的所有函数原型,便于其他文件引用时使用。 #### 2. 主函数文件 ...

    自定义selects输入框

    jQuery Select下拉单选和多选美化的实现通常基于jQuery插件,这些插件可以将传统的`&lt;select&gt;`元素转换为更具有交互性的组件。这不仅包括视觉上的改进,如自定义样式和动画效果,还可能包含高级功能,如搜索过滤、...

    xheditor-1.1.14

    参数1:要粘贴的文本,例:'这里的内容完全原样显示&lt;strong&gt;aaa&lt;/strong&gt;' 参数2:是否覆盖粘贴,留空(覆盖粘贴)、true(粘贴在光标选择区域之前)、false(粘贴在光标选择区域之后) formatXHTML:格式化XHTML代码 参数...

    《正则表达式大全(下)》(高清晰)pdf版

    - 使用CSS的动画或者JavaScript实现无限循环的滚动效果。 - **5.2 HTML编辑控件类** - 实现方法: - 使用WYSIWYG编辑器插件,如TinyMCE或CKEditor。 - **5.3 颜色选取框控件** - 实现方法: - 使用HTML5的`...

    c语言课程设计.doc

    2. 菜单选择函数 int menu_select():这是一个无参函数,主要实现“功能选择”的界面,在这个界面里有显示系统的九大功能,根据每个功能前面的序号进行选择。 3. 输入记录函数 int Input():这是一个无参函数,用...

    2021-2022计算机二级等级考试试题及答案No.18819.docx

    计算机二级等级考试主要涵盖计算机基础知识、程序设计语言、数据库、网页设计等多个方面。以下是相关知识点的详细说明: 1. 动态网页程序设计语言:ASP(Active Server Pages)、JSP(JavaServer Pages)和PHP...

    通讯录代码-C语言编写

    } while (c &lt; 0 || c &gt; 11); /* 确保输入有效 */ return c; /* 返回用户的选择 */ } ``` 综上所述,这段代码实现了基于C语言的一个简单的通讯录管理系统,具有基本的记录添加、删除、查询、排序等功能。对于初学...

    关于无限分级(ASP+数据库+JS)的实现代码

    vardata='&lt;selectname="lm"onchange="CheckLm(this.value)"&gt;' // 初始化变量,读取ASP输出的数据 id_s="|"; cotename_s='-选择-|'; // 处理传入的值 if(thevalue==null||thevalue==undefined||thevalue=='')...

    2021-2022计算机二级等级考试试题及答案No.9984.docx

    2. 在C++或类似的编程语言中,`*s`代表指针s所指向的值,`s+3`则代表指针s向后移动3个元素的位置,因此`s+3`指向的是数组元素a[3]的地址,用解引用符`*`作用于`s+3`即得到a[3],所以正确答案是D。 3. 活动窗口是指...

    ElementUI v2.15 使用手册.pdf

    包含Progress进度条、Tree树形控件、Pagination分页、Badge标记、Avatar头像、Alert警告、Loading加载、Message消息提示、MessageBox弹框、Notification通知、NavMenu导航菜单、Tabs标签页、Breadcrumb面包屑、Page...

    C代码C代码通讯录通讯录通讯录

    程序首先初始化一个`ADDRESS`类型的数组`adr`,大小为`M`,然后进入一个无限循环,在每次循环中,程序会调用`menu_select`函数来获取用户的菜单选项,并根据选项执行相应的操作。 ### 七、菜单选择函数实现 `menu_...

    2021-2022计算机二级等级考试试题及答案No.987.docx

    与查询设计器等价的SQL语句是:`SELECT 学号, 成绩 FROM 成绩表 WHERE 成绩 &gt; (SELECT AVG(成绩) FROM 成绩表)`。 17. yield()方法:在多线程编程中,yield()方法用于让当前线程暂停,让相同优先级或者更高优先级的...

    毕业论文(设计)--c语言--课程设计.doc

    * 本系统显示这样的菜单:请选择系统功能项: a. 通讯信息录入 b. 通讯信息显示 c. 通讯信息保存 d. 通讯信息删除 e. 通讯信息修改 f. 通讯信息查询 二、 系统设计 1. 数据结构:结构体类型数组 2. 数据库...

    《Let's AutoIt》【第一部】 -AU3零起步教程

    关系运算包括`=`(等于)、`&lt;&gt;`(不等于)、`&lt;`(小于)、`&gt;`(大于)、`&lt;=`(小于等于)、`&gt;=`(大于等于)等。 **第二节、If…Then…Else语句** `If…Then…Else`语句用于基于条件执行不同的代码块。例如: `...

    2021-2022计算机二级等级考试试题及答案No.13228.docx

    4. 选择操作是在关系R上选取满足一定条件的记录,形成新的关系S,类似于SQL中的SELECT语句。 5. 选择运算在基本表中选择满足条件的记录组成新的关系,A选项正确。 6. Internet是全球范围内的广域网,不仅仅限于...

    2021-2022计算机二级等级考试试题及答案No.9394.docx

    计算机二级等级考试主要涵盖计算机基础知识、编程语言、数据库管理、网页技术等多个方面。以下是部分题目涉及的知识点详解: 1. **静态初始化器**:在Java等面向对象编程语言中,静态初始化器(static initializer...

    学生成绩管理系统C++.pdf

    然后,系统的菜单选择函数int menu_select()是一个无参函数,主要实现“功能选择”的界面,在这个界面里有显示系统的九大功能,根据每个功能前面的序号进行选择,中间还显示系统当前的时间。 接着,系统的输入记录...

    C语言课程设计 通讯录 大于8个有参函数

    主函数是程序的入口点,通过无限循环以及调用`menu_select`函数来显示主菜单并根据用户的选择执行相应的功能。此外,还利用了`clrscr()`函数来清除屏幕,使界面更加清晰。 ```c main() { ADDRESS adr[M]; // 定义...

Global site tag (gtag.js) - Google Analytics