就是我有一个无限级分类的表,这个表的表名是sort,字段有:
sort_id 自动增长
sort_name  类别名称
parentID   父类ID,
sortpathID 类别ID
sortPathName 类别名称
sort_num     属于第几层次
该如何编写javabean来递归(或非递归)的读取这个表的数据,并在下拉框中以树型的显示出来呢??多谢!!!

解决方案 »

  1.   

    先全部从数据库取出存入数组
    <script LANGUAGE=JavaScript>
    <!--
    var name=new Array();
    <%
          for(int i=0;i<parrStsUserList.size();i++)
          {
            pobjCp = (Cp)parrStsUserList.get(i);
            out.println("name["+i+"]=new Array('"+pobjCp.getCpID()+"','"+pobjCp.getCpname()+"','"+pobjCp.getCpuseid()+"');");

    %> 
    -->
    </script>
    getCpID是ID,getCpname是名字(北京),getCpuseid是他的父结点是哪个ID
    现在开始循环读组
    for(i=0;i<name.length;i++)
    {
    if(name[i][2]==0)//当getCpuseid为0时也就是为父结点时
    {
    Form.select.add(new Option(name[i][0],name[i][1]));//用数组的值给select建个新Option
    //name[i][0],name[i][1]这两个到底是哪个在前面哪个在后面你试一下,我忘了
    for(x=0;x<name.length;x++)//重新循环读数组找name[i]的子结点
    {
    if(name[x][2]==name[i][0])//当getCpuseid为name[i][0])时
    {
    Form.select.add(new Option(name[x][0],name[x][1]));//用数组的值给select建个新Option
    for(y=0;y<name.length;y++)//重新循环读数组找name[x]的子结点
    {
    if(name[y][2]==name[x][0])//当getCpuseid为name[x][0])时
    {
    Form.select.add(new Option(name[y][0],name[y][1]));//用数组的值给select建个新Option
    }
    }
    }
    }
    }
    }
    基本上就是这样,你试试
    还有你有分层,就是子结点有缩进
    Form.select.add(new Option(name[y][0],"&nbsp;&nbsp;"+name[y][1]));
    也就是在<Option value=name[y][0]>&nbsp;&nbsp;name[y][1]</option>就是在前面加几个空格就行了这个是在JSP页面上用JS来完成的,你说要在BEAN里完成这个,其实一样,就是把数据库取出后排列存入类中,然后在前台把这个类里的值赋给SELECT就行了
      

  2.   

    function check(userid){
    for(i=0;i<name.length;i++)
    {
    if(name[i][2]==userid)//当getCpuseid为0时也就是为父结点时
    {
    Form.select.add(new Option(name[i][0],name[i][1]));
    check(name[i][0]);
    }
    }
    }
    }
    check(0);//递归调用check函数,这个0就是一开始找父结点
    你先试试,我没测试过
      

  3.   

    <%@ page contentType="text/html;charset=GBK" %>
    <%@ include file="incdb.jsp"%>
    <%@ include file="session.jsp"%>
    <%
       //查询所有大类以树型显示在下拉列表框
       Vector listsort = new Vector();
       DisSort dissort = new DisSort();   listsort=dissort.allSort();
    %>
    <html>
    <head>    
    <meta http-equiv="Content-Type" content="text/html; charset=GBK">
    <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
    <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
    <META HTTP-EQUIV="Expires" CONTENT="0">
    <title>广州凯澳贸易有限公司-(中文版)婚纱后台管理系统</title>
    <link rel="stylesheet" href="images/css.css" type="text/css" media="screen"><script Language="JavaScript">
    <!--
    function check_input(theForm)
    {   if (theForm.sortname.value == "")
      {
        alert("请输入类别名称.");
        theForm.sortname.focus();
        return (false);
      }  if (theForm.sortname.value.length > 45)
        {
        alert("部门名称长度应小于22个字符或数字.");
        theForm.sortname.focus();
        return (false);
      }
       
    }
      function check(userid,name){
      var Form = document.getElementById("add")
      
        for(i=0;i<name.length;i++)
        {
               if(name[i][2]==userid)//当getCpuseid为0时也就是为父结点时
              {
                Form.sort_id.add(new Option(name[i][0],name[i][1]));
                check(name[i][0],name);
              }
         }
      }
      
    <!--
      function load(){
        var name=new Array();
    <%
          for(int i=0;i<listsort.size();i++)
          {
            Sort sort = (Sort)listsort.get(i);
            out.println("name["+i+"]=new Array('"+sort.getSort_id()+"','"+sort.getSort_name()+"','"+sort.getParentID()+"');");
            System.out.println("111111111");
          } 
    %> 
       check(0,name);
     }
    -->
      
    }
    //-->
    </script>
    </head>
    <body topmargin=0 onLoad="load();">
    <TABLE width=55% border="0" align=center cellpadding=6 cellspacing=1 class="tableBorder">
    <form name="add" id="add" method="POST" action="sort_save.jsp" onSubmit="return check_input(this)" enctype="multipart/form-data">
    <TR>
    <Th colspan=2><div align="center">添加产品类别</span></div></th>
    </TR> <TR bgcolor="#FFFFFF">
      <TD class=forumrow width="30%">所属大类:</TD>
      <TD class=forumrow width="70%"><select id=sort_id name=sort_id class="input">
      <OPTION value="0">==根类==</OPTION></select>
      </TD>
    </TR>
    <TR bgcolor="#FFFFFF">
      <TD class=forumrow width="30%">类别名称:</TD>
    <TD class=forumrow width="70%">
      <input TYPE="text" name=sortname size=25 maxlength=25>
      &nbsp;**不得超过 20 个汉字</TD>
    </TR>
    <TR bgcolor="#FFFFFF">
      <TD class=forumrow width="30%">类别序号:</TD>
      <TD class=forumrow width="70%">
      <input TYPE="text" name=sort_order size=3 maxlength=10 value="1">
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      &nbsp;**不得超过 20 个汉字</TD>
    </TR>
    <TR bgcolor="#FFFFFF">
      <TD class=forumrow width="30%">上传图片:</TD>
      <TD class=forumrow width="70%"><span class="forumRow">
        <input type="file" name="file">
      </span></TD>
    </TR>
    <TR bgcolor="#FFFFFF"><TD class=forumrow height="45" colspan=2 align=center>   <FONT color=#000000>
    <INPUT name=Submit type=submit value="确 定"> &nbsp;&nbsp;     
    <INPUT name=Submit2 type=reset value="清 除"></FONT></TD>
    </TR>
      </form>
    </TABLE>liaohaiying(大菜) ,大侠你好,就是我用这个调用js,怎么报错说是“缺少对象”啊?郁闷。不知道是哪里出错了,麻烦帮我看一下,也请各位大侠帮小弟指导一下,小弟不胜感激,上面是代码,文件的名字叫sort_add.jsp
      

  4.   

    <script Language="JavaScript">
    <!--
        var name=new Array();
    <%
          for(int i=0;i<listsort.size();i++)
          {
            Sort sort = (Sort)listsort.get(i);
            out.println("name["+i+"]=new Array('"+sort.getSort_id()+"','"+sort.getSort_name()+"','"+sort.getParentID()+"');");
          } 
    %> 
    function check_input(theForm)
    {   if (theForm.sortname.value == "")
      {
        alert("请输入类别名称.");
        theForm.sortname.focus();
        return (false);
      }  if (theForm.sortname.value.length > 45)
        {
        alert("部门名称长度应小于22个字符或数字.");
        theForm.sortname.focus();
        return (false);
      }
       
    }
      function check(userid){
        for(i=0;i<name.length;i++)
        {
               if(name[i][2]==userid)//当getCpuseid为0时也就是为父结点时
              {
                add.sort_id.add(new Option(name[i][0],name[i][1]));
                check(name[i][0]);
              }
         }
      }
       check(0);
      
    //-->
    </script>
    改成这样,name数组不用传的,用check(0);就行了,body里面也不用onload了