看看这里,http://community.csdn.net/Expert/TopicView.asp?id=3190905

解决方案 »

  1.   

    这样吧,可否不使用递归也可以实现以上目录树的结构!!!我的代码是
    <%!
    String sId;
    String sName;
    String sTemp;
    ResultSet rset=null;
    int iCount=0;
    int iLen = 0;
    int iLength = 3;
    int iLens=3;
    %>
    <div>
    <span><input type=checkbox>企业</span>
    <UL id=root>
    <%
      rset=conn.executequery("select * from tree  order by id");
    //主目录信息
      while (rset.next())
      {
           sId = rset.getString("id");
           iLen = sId.length();
           sName=rset.getString("name");
           ResultSet rs = conn.executequery("select count(*) as icount from tree where id like: '"+sId+"%'");
          if(rs.next())  iCount = rs.getInt("icount");//得到是否有下级目录
           if(iCount==1)
            {
    %>
                <LI><span><input type=checkbox value=<%=sId%>> <%=sName%></span>
    <%
            }
          if((iCount>1)&&((iLength-iLen==0)||(iLen % iLength==0)))
           {
    %>
             <LI><span><input type=checkbox value=<%=sId%>> <%=sName%></span>
             <UL>
    <%
           }
           if(iLen-iLens<0)
           {
    %>
             </UL><%
           }   iLens = iLen;
      }
    %>
    </UL>
    </div>
    但是在没有子目录情况下就会出错!!如何更改?或者有更好的解决办法
      

  2.   

    我没有连接数据库,把数据全放到了ArrayList里了,已经调试通过,你看看吧
    嫌效率不高的话自己优化吧TreeTest.java
    ===================================================================
    package treetest;import java.sql.*;
    import java.util.*;public class TreeTest {
      StringBuffer buffer = new StringBuffer();
      String result;
      ArrayList codeList = new ArrayList();
      ArrayList nameList = new ArrayList();  public String getResult() {
        return buffer.toString();
      }  public TreeTest() {
        
        codeList.add("001");
        nameList.add("生产部门");
        
        codeList.add("001001");
        nameList.add("生产一部");
        
        codeList.add("001002");
        nameList.add("生产二部");
        
        codeList.add("002");
        nameList.add("业务部门");
        
        codeList.add("002001");
        nameList.add("业务部门1");
        
        codeList.add("002002");
        nameList.add("业务部门2");
        
        codeList.add("002003");
        nameList.add("业务部门3");
        
        codeList.add("003");
        nameList.add("市场部门");
        
        codeList.add("003001");
        nameList.add("市场部门1");
        
        codeList.add("003002");
        nameList.add("市场部门2");
        
        codeList.add("004");
        nameList.add("开发部门");
        
        codeList.add("004001");
        nameList.add("开发部门1");
        
        codeList.add("005");
        nameList.add("策划部门");
        
        codeList.add("005001");
        nameList.add("策划部门 1");
        
        codeList.add("005002");
        nameList.add("策划部门 2");
        
        codeList.add("006");
        nameList.add("企业规划部");
        
        codeList.add("006001");
        nameList.add("企业规划部 1");
        
        codeList.add("006002");
        nameList.add("企业规划部 2");
        
        codeList.add("006003");
        nameList.add("企业规划部 3");
        
        codeList.add("006003001");
        nameList.add("企业规划部 3001");    
        
        codeList.add("006003001001");
        nameList.add("企业规划部 3001001");        codeList.add("006003001001001");
        nameList.add("企业规划部 3001001001");        codeList.add("006003002");
        nameList.add("企业规划部 3002");        
        
        codeList.add("006004");
        nameList.add("企业规划部 4");
        buffer.append("<div>\n");
        buffer.append("<span><input type=checkbox>系统目录</span>\n");
        buffer.append("<UL id=root>");    
        makeTree(codeList,nameList,1,null);
        buffer.append("</UL>");        
        buffer.append("</div>\n");    
      }  public void makeTree(ArrayList cList,ArrayList nList,int level,String parentCode){
        int len = level*3;
        String space = "";
        for(int n = 1; n < level;n++){
          space += "  ";
        }    for(int i = 0;i < cList.size();i++)
        {
          String code = (String)cList.get(i);
          String name = (String)nList.get(i);
          if(code.length() != len)
            continue;
          if(level == 1){
            buffer.append(space + "<LI><span><input type=checkbox>" + name + "</span>\n");
            if(hasChild(code,cList)){
              buffer.append(space + "<UL>\n");
              makeTree(cList, nList, level + 1, code);
              buffer.append(space + "</UL>\n");
            }
          }else if(code.startsWith(parentCode)){
            buffer.append(space + "<LI><span><input type=checkbox>" + name + "</span>\n");
            if(hasChild(code,cList)){        
              buffer.append(space + "<UL>\n");
              makeTree(cList, nList, level + 1, code);
              buffer.append(space + "</UL>\n");
            }
          }
        }
      }
      public boolean hasChild(String c,ArrayList cList){
        boolean hasChild = false;
        Iterator iter = cList.iterator();
        while(iter.hasNext()){      
          String tmpCode = (String) iter.next();
          if((tmpCode.length() == c.length() + 3 )&&tmpCode.startsWith(c)){        
            return true;
          }
        }
        return hasChild;
      }}test.jsp
    ------------------------------------------------------------------
    <%@ page contentType="text/html; charset=GBK" %>
    <html>
    <head>
    <title>
    jsp1
    </title>
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    function checkSelect(){
    var elm = event.srcElement.parentNode;
    checkChildrenRecurve(elm);
    checkRootRecurve(document.getElementById("root"));
    }
    function checkChildrenRecurve(elm){
    var li = elm.parentNode;
    var ul = li.lastChild;
    if (ul.tagName != "UL") return;
    var lis = ul.children;
    for (var i=0;i<lis.length;i++){
    lis[i].firstChild.firstChild.checked=elm.firstChild.checked;
    checkChildrenRecurve(lis[i].firstChild)
    }
    }
    function checkRootRecurve(ul){
    if (ul.tagName != "UL") {
    ul.parentNode.firstChild.firstChild.allChecked = ul.parentNode.firstChild.firstChild.checked;
    ul.parentNode.firstChild.firstChild.allUnChecked = !ul.parentNode.firstChild.firstChild.checked;
    return;
    }
    var lis = ul.children;
    var allChecked = true;
    var allUnChecked = true;
    for (var i=0;i<lis.length;i++){
    checkRootRecurve(lis[i].lastChild);
    allChecked = allChecked && lis[i].firstChild.firstChild.checked && lis[i].firstChild.firstChild.allChecked;
    allUnChecked = allUnChecked && !lis[i].firstChild.firstChild.checked && lis[i].firstChild.firstChild.allUnChecked;
    }
    ul.parentNode.firstChild.firstChild.allChecked=allChecked;
    ul.parentNode.firstChild.firstChild.allUnChecked=allUnChecked;
    if (allChecked || allUnChecked){
    ul.parentNode.firstChild.firstChild.checked=allChecked;
    ul.parentNode.firstChild.firstChild.disabled=false;
    ul.parentNode.firstChild.childStatus=false;
    }else{
    ul.parentNode.firstChild.firstChild.disabled=true;
    ul.parentNode.firstChild.childStatus=true;
    ul.parentNode.firstChild.firstChild.checked=true; }
    }function enableFirstChild(){
    this.childStatus = this.firstChild.disabled;
    this.firstChild.disabled=false;
    }
    function recoverFirstChild(){
    this.firstChild.disabled = this.childStatus;
    }
    function init(){
    var elms = document.getElementsByTagName("INPUT");
    for (var i=0;i<elms.length;i++)
    elms[i].onclick=checkSelect;
    var elms = document.getElementsByTagName("SPAN");
    for (var i=0;i<elms.length;i++){
    elms[i].onmouseover=enableFirstChild;
    elms[i].onmouseout=recoverFirstChild;
    }
    }//-->
    </SCRIPT>
    </head>
    <jsp:useBean id="treeBean" scope="request" class="treetest.TreeTest" />
    <body onload="init()">
    <%
    out.println(treeBean.getResult());
    %>
    </body>
    </html>