数据表:"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);
}
}

}