JAVA展示树形结构(用户名字上下级关系展示)

zhaofeng_imc 2009-07-14 08:34:53
数据表:"DP_MG_UM_USER_LEVEL"
USER_ID VARCHAR(20) , --用户ID
USER_NAME VARCHAR(20), --用户名
USER_DEPT_ID INTEGER, --用户所属部门
USER_DEPT_NAME VARCHAR(20), --部门名称
USER_DEPT _LEVE INTEGER, --用户在部门中的级别序号(1:领导3:一般职员)
USER_PARENT_ID INTEGER --用户的上级用户ID
我写出的代码,按树形展示,但是只有根节点树形正确,子节点在每个节点(user_name<顶级领导>)下(<user_name<一般领导>)都是一样的(重复了),可是要求每个根节点(user_name<一般领导>)下的员工都不同,我用的树递归,递归条件是多个<user_parent_id>属于一个(user_name),请大家帮我看看我的SQL语句和树递归该怎么写。
代码如下:
package DP.Business.Manage;

import java.io.IOException;
import java.sql.SQLException;
import javax.sql.rowset.CachedRowSet;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;

import DP.Business.Common.clsDataBase;
import DP.Business.Common.tw_BeanFactory;

public class UserLevel {
public UserLevel() {
}

public String getUserInfoResponse(String jspname, ClientBuffer cb)
throws SQLException, Tw_Exception {
/*
* Object strTree =
* cb.getRequest().getSession(true).getAttribute("organTree");
* if(strTree != null) { return strTree.toString(); } else { return
* getUserTree(jspname, cb); }
*/
return getUserTree(jspname, cb);
}

private String getUserTree(String jspname, ClientBuffer cb)
throws Tw_Exception, SQLException {
StringBuffer optionStr = new StringBuffer();
String strSql = "";
if (cb.getIsSuperManager()) {
strSql = "select * from DP_MG_UM_USER_LEVEL where user_parent_id is null order by user_dept_id";

} else {
strSql = "select * from DP_MG_UM_USER_LEVEL where user_parent_id= "
+ cb.getCompanyID() + " order by user_dept_id ";
// b.company_id in (select organ_id from dp_mg_um_organ where
// organ_path like '" + companyId + "%') and ";
}
CachedRowSet dt;
clsDataBase dbConnection = tw_BeanFactory.getClsDataBase();
dt = dbConnection.ExcuteQuery(strSql);
optionStr
.append(
"<script type='text/javascript' src='styles/js/dtree.js'></script>")
.append("</br>");
if (cb.getIsSuperManager()) {
optionStr
.append("<script type='text/javascript' charset='gb2312'> d = new dTree('d');d.add(-3,-1,'');d.add(-2,-3,'湖南省移动通信公司','');");
} else {
// 非系统管理员从其所属的公司开始
optionStr
.append(" <script type='text/javascript' charset='gb2312'> ");
optionStr.append(" d = new dTree('d'); ");
optionStr.append(" d.add(-3,-1,''); ");
optionStr
.append(" d.add(-2,-3,'" + cb.getCompanyName() + "',''); ");
// System.out.println("公司名字:"+cb.getCompanyName());
}
while (dt.next()) {
optionStr.append("d.add('").append(dt.getString("USER_NAME"))
.append("','").append("-2").append("','").append(
dt.getString("USER_NAME") + "("
+ dt.getString("USER_DEPT_NAME") + ")")
.append("');");
getUserChildNodes(jspname, optionStr,dt.getString("user_name"), 1);
}
optionStr.append(" document.write(d);</script>");
System.out.println("tree: " + optionStr.toString());
// cb.getRequest().getSession(true).setAttribute("organTree",
// optionStr);
return new String(optionStr);
}
//下面方法运行后,每个根节点下都是一样的用户,该怎么改下?
private void getUserChildNodes(String jspname, StringBuffer optionStr,
String user_name, int level) throws Tw_Exception, SQLException {
String strSql = " select * from DP_MG_UM_USER_LEVEL where user_parent_id like 'HNLD%' order by user_dept_id";

CachedRowSet dt;
clsDataBase dbConnection = tw_BeanFactory.getClsDataBase();
dt = dbConnection.ExcuteQuery(strSql);

while (dt.next()) {
optionStr.append("d.add('").append(dt.getString("USER_NAME"))
.append("','").append(user_name).append("','")
.append(dt.getString("USER_NAME") + "("
+ dt.getString("USER_DEPT_NAME") + ")")
.append("');");
//getUserChildNodes(jspname, optionStr,dt.getString("user_name"), 1);
}
}

}
...全文
1543 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wys00100 2010-03-03
  • 打赏
  • 举报
回复
synchronized
sastank 2009-07-15
  • 打赏
  • 举报
回复
消灭0回复,友情帮顶顺便学习、接分
bhzln 2009-07-15
  • 打赏
  • 举报
回复
这种递归程序最好用存储过程实现,一个是简单,另外一个是层级多了效率好,oracle数据提供的递归函数非常方便,一句话就解决你这一大堆代码,何乐而不为呢

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧