页面代码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="java.util.List"%>
<%@ page import="com.prpsdc.infosystem.util.TreeUtil"%>
<html>
<body onload="setPreviewHight()">
<script type="text/javascript" src="js/menu.js"></script>
<script language="javascript">
      function add(){
      frames["iframe1"].document.forms["menu"].submit();
      }
</script>
<SCRIPT LANGUAGE="JavaScript" src="js\ClassTree.js"></SCRIPT>
<form name="menuUser" method="post" target="iframe1">
<div align='left'>    
<table width="330" border="1">
<tr >
<td>
<div style="overflow:scroll;width:180;height:350" id="orgUserTreePreview">
<%
List list1 = (List)request.getAttribute("orgTree");
//生成树状列表
String orgJs = TreeUtil.getOrgUserTreeTarget(this.getServletContext(),list1,false,"systemRightPreview.do?type=sysmenu");
out.print(orgJs);
%>
</div></td>
<td width=100>
</td>
<td align='center'>
<iframe id="iframe1"src="" name="iframe1" width="230" marginwidth="0"  marginheight="0" scrolling="no" frameborder="0"> </iframe>
</td>
</tr>
</table>
<br>
<input type="hidden" id="id" name="returnValueId" value="">
<input type="hidden" id="name" name="returnValueName" value="">
</div>
</form>
</body>
</html>
String orgJs = TreeUtil.getOrgUserTreeTarget(this.getServletContext(),list1,false,"systemRightPreview.do?type=sysmenu");
主要是这个从服务器返回来很慢.import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;import javax.servlet.ServletContext;import com.prpsdc.infosystem.domain.Account;
import com.prpsdc.infosystem.domain.Menu;
import com.prpsdc.infosystem.domain.Organization;
import com.prpsdc.infosystem.domain.Role;
import com.prpsdc.infosystem.domain.SysType;
import com.prpsdc.infosystem.domain.logic.OfficeService;
import com.prpsdc.infosystem.domain.logic.RoleService;
import com.prpsdc.infosystem.domain.logic.SystemParamService;
import com.prpsdc.infosystem.domain.logic.UserService;public class TreeUtil {
public static final int ORGANIZATION_USER_TREE = 1;
public static final int SYSTEM_MENU_TREE = 2;

private static final String ORGANIZATION_ROOT = "组织架构";
private static final String SYSTEM_MENU_ROOT = "系统菜单";public static String getOrgUserTreeTarget(ServletContext servletContext , List list , boolean check ,String userUrl){
StringBuffer script = new StringBuffer();
boolean root = false;
int id=0;
if (list != null){
for ( Iterator iterator = list.iterator(); iterator.hasNext(); ){
Organization org = (Organization)iterator.next();
if (!root){
script.append("<SCRIPT LANGUAGE='JavaScript'> \n");
script.append("<!-- \n");
script.append("treeRoot=CreateRootTarget('orgRoot','组织架构','#') \n");
if (check)
script.append("treeRoot.CreateNode("+ org.getOid() + ",-1,\"<input type='checkbox' name='org_"+ org.getOname()+"' value='"+ org.getOid() +"'>" + org.getOname() +"\",'#' )  \n");
else
script.append("treeRoot.CreateNode("+ org.getOid() + ",-1,\"" + org.getOname() +"\",'#' )  \n");
root = true ;
}
else{
if (check)
script.append("treeRoot.CreateNode("+ org.getOid() + ","+ org.getParentoid() +",\"<input type='checkbox' name='org_"+ org.getOname()+"' value='"+ org.getOid() +"'>" + org.getOname() +"\",'#' )  \n");
else
script.append("treeRoot.CreateNode("+ org.getOid() + ","+ org.getParentoid() +",\"" + org.getOname() +"\",'#' )  \n");
}
//把当前部门用户列表显示
String oid = String.valueOf(org.getOid()); List users = ((UserService)ServicesFactory.getService(servletContext,"userService")).getAccountListByOid(oid);
if (users != null)
for ( Iterator it = users.iterator(); it.hasNext(); ){
Account user = (Account)it.next();
String url = CharUtil.combineUel(userUrl,"uid",user.getUserid()); 
                        id++;
                        String strid="font"+String.valueOf(id);
                        String uName="<font id='"+strid +"' onclick=changeColor('"+ strid +"')>" + user.getUname() +"</font>";
if (check)
script.append("treeRoot.CreateNode(9,"+ org.getOid() +",\"<input type='checkbox' name='usr_"+ user.getUname()+"' value='"+ user.getUserid() +"'>" + user.getUname() +"\",\""+ url +"\" )  \n");
else
script.append("treeRoot.CreateNode(9,"+ org.getOid() +",\"" + uName +"\",\""+ url +"\" )  \n"); //script.append("treeRoot.CreateNode(1,"+ org.getOid() +",\"<input type='checkbox' name='usr_' value='"+ user.getUserid() +"'>" + user.getUname() +"\",'#' )  \n");
} }
script.append(" //--> \n");
script.append(" </SCRIPT> \n");
}

return script.toString();
}}下面是js
function CreateRootTarget(mId,Title,Url)
{
var TreeId
TreeId=mId
if(eval("window.TMNode_"+mId))
{
alert("<?????>\n????Id???")
return null
}
var str = ""
str+="<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" class=\"TMStyle\">"
str+="<tr>"
//str+="<td colspan=\"2\"><span style=\"cursor:hand\" onclick=\"if(TMRoot_"+mId+"_Tr.style.display==''){TMRoot_"+mId+"_Tr.style.display='none';}else{TMRoot_"+mId+"_Tr.style.display=''}\"><img id=\"TMRoot_"+mId+"_Img\" src='images\\leaf1.gif'></span> <a href='"+ Url +"' target='iframe1'>" + Title + "</a></td>"
if (Url != "#")
str+="<td colspan=\"2\"><span style=\"cursor:hand\" onclick=\"if(TMRoot_"+mId+"_Tr.style.display==''){TMRoot_"+mId+"_Tr.style.display='none';}else{TMRoot_"+mId+"_Tr.style.display=''}\"><img id=\"TMRoot_"+mId+"_Img\" src='images\\leaf1.gif'></span> <a href='"+ Url +"' target='iframe1'>" + Title + "</a></td>"
else
str+="<td colspan=\"2\"><span style=\"cursor:hand\" onclick=\"if(TMRoot_"+mId+"_Tr.style.display==''){TMRoot_"+mId+"_Tr.style.display='none';}else{TMRoot_"+mId+"_Tr.style.display=''}\"><img id=\"TMRoot_"+mId+"_Img\" src='images\\leaf1.gif'></span> " + Title + "</td>"

str+="</tr>"
str+="<tr style=\"display:\" id=\"TMRoot_"+mId+"_Tr\">"
str+="<td width=\"1%\" align=\"right\"  valign=\"top\">&nbsp;&nbsp;&nbsp;</td>"
str+="<td width=\"99%\" id=\"TMNode_"+mId+"\"></td>"
str+="</tr>"
str+="</table>"
document.write(str); this.CreateNode=function (Id,pId,Title,Url){
var pNode=null
if(pId==-1){
pNode=eval("window.TMNode_"+mId)
}else{
pNode=eval("window.TMNode_"+mId+"_"+pId)
}
if(pNode!=null)
{
var str = ""
str+="<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">"
str+="<tr> "
//str+="<td colspan=\"2\"><span style=\"cursor:hand\" onclick=\"exNode(eval('window.TMNode_"+mId+"_"+Id+"_tr'),eval('window.TMNode_"+mId+"_"+Id+"'),eval('window.TMNode_"+Id+"_Img'))\"> <img id=\"TMNode_"+Id+"_Img\" src='images\\midplus.gif'> </span> <a href='"+ Url +"'  target='iframe1'>" + Title + "</a> </td>"
if (Url != "#")
str+="<td colspan=\"2\"><span style=\"cursor:hand\" onclick=\"exNode(eval('window.TMNode_"+mId+"_"+Id+"_tr'),eval('window.TMNode_"+mId+"_"+Id+"'),eval('window.TMNode_"+Id+"_Img'))\"> <img id=\"TMNode_"+Id+"_Img\" src='images\\midplus.gif'> </span> <a href='"+ Url +"'  target='iframe1'>" + Title + "</a> </td>"
else
str+="<td colspan=\"2\"><span style=\"cursor:hand\" onclick=\"exNode(eval('window.TMNode_"+mId+"_"+Id+"_tr'),eval('window.TMNode_"+mId+"_"+Id+"'),eval('window.TMNode_"+Id+"_Img'))\"> <img id=\"TMNode_"+Id+"_Img\" src='images\\midplus.gif'> </span> " + Title + " </td>"

str+="</tr>"

str+="<tr style=\"display:none\" id=\"TMNode_"+mId+"_"+Id+"_tr\">"
str+="<td width=\"1%\" align=\"right\">&nbsp;&nbsp;</td>"
str+="<td width=\"99%\" id=\"TMNode_"+mId+"_"+Id+"\"></td>"
str+="</tr>"

str+="</table>"
pNode.innerHTML+=str
}
}
return this
}

解决方案 »

  1.   

    运行后页面生成js脚本<SCRIPT LANGUAGE='JavaScript'> 
    <!-- 
    treeRoot=CreateRootTarget('orgRoot','组织架构','#') 
    treeRoot.CreateNode(1,-1,"中水珠江设计公司",'#' )  
    treeRoot.CreateNode(9,1,"<font id='font1' onclick=changeColor('font1')>游</font>","sysrightMenu.do?type=sysmenu&uid=308" )  
    treeRoot.CreateNode(9,1,"<font id='font2' onclick=changeColor('font2')>黄</font>","sysrightMenu.do?type=sysmenu&uid=309" )  
    treeRoot.CreateNode(9,1,"<font id='font3' onclick=changeColor('font3')>吕</font>","sysrightMenu.do?type=sysmenu&uid=313" )  
    treeRoot.CreateNode(9,1,"<font id='font4' onclick=changeColor('font4')>凌</font>","sysrightMenu.do?type=sysmenu&uid=311" )  
    treeRoot.CreateNode(9,1,"<font id='font5' onclick=changeColor('font5')>陈</font>","sysrightMenu.do?type=sysmenu&uid=312" )  
    treeRoot.CreateNode(9,1,"<font id='font6' onclick=changeColor('font6')>冯</font>","sysrightMenu.do?type=sysmenu&uid=321" )  
    treeRoot.CreateNode(9,1,"<font id='font7' onclick=changeColor('font7')>林</font>","sysrightMenu.do?type=sysmenu&uid=881" )  
    treeRoot.CreateNode(9,1,"<font id='font8' onclick=changeColor('font8')>洪</font>","sysrightMenu.do?type=sysmenu&uid=902" )  
    treeRoot.CreateNode(9,1,"<font id='font9' onclick=changeColor('font9')>黄</font>","sysrightMenu.do?type=sysmenu&uid=661" )  
    treeRoot.CreateNode(143,1,"人事处",'#' )  
    treeRoot.CreateNode(9,143,"<font id='font10' onclick=changeColor('font10')>冯</font>","sysrightMenu.do?type=sysmenu&uid=321" )  
    treeRoot.CreateNode(9,143,"<font id='font11' onclick=changeColor('font11')>周</font>","sysrightMenu.do?type=sysmenu&uid=322" )  
    treeRoot.CreateNode(9,143,"<font id='font12' onclick=changeColor('font12')>陈</font>","sysrightMenu.do?type=sysmenu&uid=1682" )  
    treeRoot.CreateNode(9,143,"<font id='font13' onclick=changeColor('font13')>王</font>","sysrightMenu.do?type=sysmenu&uid=585" )  
    treeRoot.CreateNode(95,1,"办公室",'#' )  
    treeRoot.CreateNode(9,95,"<font id='font14' onclick=changeColor('font14')>李</font>","sysrightMenu.do?type=sysmenu&uid=314" )  
    treeRoot.CreateNode(9,95,"<font id='font15' onclick=changeColor('font15')>陈</font>","sysrightMenu.do?type=sysmenu&uid=315" )  
    treeRoot.CreateNode(9,95,"<font id='font16' onclick=changeColor('font16')>白</font>","sysrightMenu.do?type=sysmenu&uid=1223" )  
    treeRoot.CreateNode(9,95,"<font id='font17' onclick=changeColor('font17')>邓懿</font>","sysrightMenu.do?type=sysmenu&uid=545" )  
    treeRoot.CreateNode(3213,95,"车队",'#' )  
    treeRoot.CreateNode(9,3213,"<font id='font18' onclick=changeColor('font18')>李</font>","sysrightMenu.do?type=sysmenu&uid=317" )  
    treeRoot.CreateNode(9,3213,"<font id='font19' onclick=changeColor('font19')>黄</font>","sysrightMenu.do?type=sysmenu&uid=318" )  
    treeRoot.CreateNode(3212,95,"后勤科",'#' )  
    treeRoot.CreateNode(9,3212,"<font id='font20' onclick=changeColor('font20')>帅</font>","sysrightMenu.do?type=sysmenu&uid=323" )  
    treeRoot.CreateNode(9,3212,"<font id='font21' onclick=changeColor('font21')>甘</font>","sysrightMenu.do?type=sysmenu&uid=673" )  
    treeRoot.CreateNode(9,3212,"<font id='font22' onclick=changeColor('font22')>陆</font>","sysrightMenu.do?type=sysmenu&uid=675" )  
    treeRoot.CreateNode(3451,1,"勘测总队",'#' )  
    treeRoot.CreateNode(9,3451,"<font id='font23' onclick=changeColor('font23')>朱</font>","sysrightMenu.do?type=sysmenu&uid=601" )  
    treeRoot.CreateNode(9,3451,"<font id='font24' onclick=changeColor('font24')>吴</font>","sysrightMenu.do?type=sysmenu&uid=603" )  
    treeRoot.CreateNode(9,3451,"<font id='font25' onclick=changeColor('font25')></font>","sysrightMenu.do?type=sysmenu&uid=1984" )  
    treeRoot.CreateNode(9,3451,"<font id='font26' onclick=changeColor('font26')></font>","sysrightMenu.do?type=sysmenu&uid=605" )  
    treeRoot.CreateNode(3452,3451,"地质队",'#' )  
    treeRoot.CreateNode(9,3452,"<font id='font27' onclick=changeColor('font27')>吴</font>","sysrightMenu.do?type=sysmenu&uid=607" )  
    treeRoot.CreateNode(9,3452,"<font id='font28' onclick=changeColor('font28')>陈</font>","sysrightMenu.do?type=sysmenu&uid=609" )  
    treeRoot.CreateNode(3453,3451,"测量队",'#' )  
    treeRoot.CreateNode(9,3453,"<font id='font29' onclick=changeColor('font29')>郭</font>","sysrightMenu.do?type=sysmenu&uid=613" )  
    treeRoot.CreateNode(9,3453,"<font id='font30' onclick=changeColor('font30')>何</font>","sysrightMenu.do?type=sysmenu&uid=611" )  
    treeRoot.CreateNode(9,3453,"<font id='font31' onclick=changeColor('font31')>测试11</font>","sysrightMenu.do?type=sysmenu&uid=2004" )  
    treeRoot.CreateNode(3454,3451,"钻探队",'#' )  
    treeRoot.CreateNode(9,3454,"<font id='font32' onclick=changeColor('font32')>测试10</font>","sysrightMenu.do?type=sysmenu&uid=2003" )  
    treeRoot.CreateNode(9,3454,"<font id='font33' onclick=changeColor('font33')>李镜</font>","sysrightMenu.do?type=sysmenu&uid=615" )  
    treeRoot.CreateNode(9,3454,"<font id='font34' onclick=changeColor('font34')>测试9</font>","sysrightMenu.do?type=sysmenu&uid=2002" )  
    treeRoot.CreateNode(9,3454,"<font id='font35' onclick=changeColor('font35')>测试11</font>","sysrightMenu.do?type=sysmenu&uid=2004" )  
    treeRoot.CreateNode(3455,3451,"测试中心",'#' )  
    treeRoot.CreateNode(9,3455,"<font id='font36' onclick=changeColor('font36')>谢</font>","sysrightMenu.do?type=sysmenu&uid=617" )  
    treeRoot.CreateNode(9,3455,"<font id='font37' onclick=changeColor('font37')>213213</font>","sysrightMenu.do?type=sysmenu&uid=1704" )  
    treeRoot.CreateNode(9,3455,"<font id='font38' onclick=changeColor('font38')>123213213</font>","sysrightMenu.do?type=sysmenu&uid=1702" )  
    treeRoot.CreateNode(3457,3451,"综合科",'#' )  
    treeRoot.CreateNode(9,3457,"<font id='font39' onclick=changeColor('font39')>麻</font>","sysrightMenu.do?type=sysmenu&uid=621" )  
    treeRoot.CreateNode(3456,3451,"财务科",'#' )  
     //--> 
     </SCRIPT>
      

  2.   

    to nighthawk(我们孤单,我们并肩) 同感!
      

  3.   

    效率低下是必然的,一次从数据库全部读出当然效率低下
    可采用ajax,先读出父节点,然后按需读出子节点
      

  4.   

    晕,关键是现在没有用到ajax.数据处理速度到不是很慢,数据量不是很大.static String getOrgUserTreeTarget  返回字符串到页面非常慢.
      

  5.   

    String orgJs = TreeUtil.getOrgUserTreeTarget(this.getServletContext(),list1,false,"systemRightPreview.do?type=sysmenu");
    是否跟这有一定关系.
      

  6.   

    从网上下了一个dtree的代码
    example.jsp显示树
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html>
    <head>
    <title>Destroydrop &raquo; Javascripts &raquo; Tree</title>
    <link rel="StyleSheet" href="dtree.css" type="text/css" />
    <script type="text/javascript" src="dtree.js"></script>
    </head>
    <body>
    <div class="dtree">
    <p><a href="javascript: d.openAll();">open all</a> | <a href="javascript: d.closeAll();">close all</a></p>
    <script type="text/javascript">
    <!--
    d = new dTree('d');
    d.add(3,1,'Node 1.1','example01.html');
    d.add(4,0,'Node 3','example01.html');
    d.add(5,3,'Node 1.1.1','example01.html');
    d.add(6,5,'Node 1.1.1.1','example01.html');
    d.add(7,0,'Node 4','example01.html');
    d.add(0,-1,'My example tree');
    d.add(8,1,'Node 1.2','example01.html');
    d.add(9,0,'My Pictures','example01.html','Pictures I\'ve taken over the years','','','img/imgfolder.gif');
    d.add(110,9,'asd','example01.html','Pictures of Gullfoss and Geysir');
    d.add(111,9,'aa','example01.html');
    d.add(12,0,'Recycle Bin','example01.html','','','img/trash.gif');
    d.add(1,0,'Node 1','example01.html');
    d.add(2,0,'Node 2','example01.html');
    document.write(d);
    //-->
    </script>
    </div>
    </body>
    </html>
    但是如果把这些代码放到模式对话框中,点+号的时候就弹出了一个新的窗口(地址栏为javascript:%20d.o(11);),请问是哪里出了问题啊?
      

  7.   

    你这种我见到过了,
    我们有一种树和你的差不多,
    是组织结构树,
    当人员起过五百个的时候,
    页面会提示说,脚本太大不能运行,
    后来改用XML做的树,
    先放到XML文件中,在点击一次读取一层就好了
      

  8.   

    从网上下了一个dtree的代码
    example.jsp显示树
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html>
    <head>
    <title>Destroydrop &raquo; Javascripts &raquo; Tree</title>
    <link rel="StyleSheet" href="dtree.css" type="text/css" />
    <script type="text/javascript" src="dtree.js"></script>
    </head>
    <body>
    <div class="dtree">
    <p><a href="javascript: d.openAll();">open all</a> | <a href="javascript: d.closeAll();">close all</a></p>
    <script type="text/javascript">
    <!--
    d = new dTree('d');
    d.add(3,1,'Node 1.1','example01.html');
    d.add(4,0,'Node 3','example01.html');
    d.add(5,3,'Node 1.1.1','example01.html');
    d.add(6,5,'Node 1.1.1.1','example01.html');
    d.add(7,0,'Node 4','example01.html');
    d.add(0,-1,'My example tree');
    d.add(8,1,'Node 1.2','example01.html');
    d.add(9,0,'My Pictures','example01.html','Pictures I\'ve taken over the years','','','img/imgfolder.gif');
    d.add(110,9,'asd','example01.html','Pictures of Gullfoss and Geysir');
    d.add(111,9,'aa','example01.html');
    d.add(12,0,'Recycle Bin','example01.html','','','img/trash.gif');
    d.add(1,0,'Node 1','example01.html');
    d.add(2,0,'Node 2','example01.html');
    document.write(d);
    //-->
    </script>
    </div>
    </body>
    </html>
    但是如果把这些代码放到模式对话框中,点+号的时候就弹出了一个新的窗口(地址栏为javascript:%20d.o(11);),请问是哪里出了问题啊?这个问题大家遇到过没有.
      

  9.   

    用js读取树型是没办法快的,用微软的控件还稍微可以提高一点速度。用ajax才是真正解决办法。
      

  10.   

    而且看楼主发的运行后页面生成的js脚本,里面的数据量很少,绝对不是JS脚本本身处理的效率和极限的问题. 肯定是取数据的语句无谓的嵌套了,以及放入的记录集对象的模式不节约.
      

  11.   

    上面那个 dtree  模式窗口问题大家遇到过没有
      

  12.   

    <base target="_self"> 加入这就行了,问题已经解决