JAVA展示树形结构(用户名字上下级关系展示)
数据表:"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);
}
}
}