日期:2014-05-18  浏览次数:20650 次

JSP实现无限级分类的算法
大家好,有在B/S开发中做过无限级分类的吗?请讲述一下算法(最好是JSP的),谢谢
就是类似这种:
电脑产品
    |_硬件
        |_CPU
    |_软件
        |_应用软件

这种模式的,有思路的请讲一下,谢谢

------解决方案--------------------
<html>
<head>
<meta http-equiv= "Content-Type " content= "text/html; charset=gb2312 ">
<title> 无限级菜单显示 </title>
</head>
<body>
<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()+ " '); ");
} //这是从数据库中读出的数据,下面的只是静态页面时的测试数据
%>
name[0]=new Array( '1 ', 'ggg ', '0 ');
name[1]=new Array( '2 ', 'aaa ', '1 ');
name[2]=new Array( '3 ', 'bbb ', '1 ');
name[3]=new Array( '4 ', 'ccc ', '2 ');
name[4]=new Array( '5 ', 'ddd ', '2 ');
name[5]=new Array( '6 ', 'eee ', '3 ');
name[6]=new Array( '7 ', 'fff ', '3 ');
name[7]=new Array( '8 ', 'hhh ', '2 ');
name[8]=new Array( '9 ', 'ggg1 ', '0 ');
name[9]=new Array( '10 ', 'aaa1 ', '9 ');
name[10]=new Array( '11 ', 'bbb1 ', '9 ');
name[11]=new Array( '12 ', 'ccc1 ', '11 ');
name[12]=new Array( '13 ', 'ddd1 ', '12 ');
name[13]=new Array( '14 ', 'eee1 ', '13 ');
name[14]=new Array( '15 ', 'fff1 ', '14 ');
name[15]=new Array( '16 ', 'hhh1 ', '15 ');
function check(userid,i,ddd)
{
ddd= " "+ddd;
for(i=0;i <name.length;i++)
{
if(name[i][2]==userid)
{
document.write(ddd+name[i][1]+ <br> );
check(name[i][0],0,ddd);
}
}
}
check(0,0, " <img src= '你菜单项前面的图片地址 '> ");
</script>
</body>
</html>
JS改为JSP很好改的
------解决方案--------------------
每个分类总归有个id吧,
那么在数据库里建个表,至少包含两个字段,parentid和childid,通过一个顶层id,可以把所有的child搜出来,还可以知道当前id属于第几层,代码可以考虑用递归。
------解决方案--------------------
一般是建一张表
基本字段如下:
ID PK,
PARENT_ID 父ID,
CODE 编号,
NAME 名称,
URL 连接地址,

当然还可以加入其他一些你需要的字段。

显示的时候做个递归或者循环,就能把所有字段都查询出来

------解决方案--------------------
树算法有几种,
一种是bbs常用数字类
parentId,就是以上各位所说的。

另一种常用的则是以字符串来表示,比如每级3位
则 001 第一层
001001 第二层。
这个用一个 id like '001% ' 就可以很方便的找到任意级的所有子对象,对于小型系统货物分类来说比较方便。但性能比上面那种要差。

不过在10w级的数据量上性能是可以接受的,差别最多在1秒左右。