递归输出问题!

lmh79 2003-01-08 11:09:46
表结构如下:
id parentid name_cn
1 0 用户管理
2 1 增加用户
3 1 查询用户
4 0 角色管理
5 4 角色增加
6 4 角色查询

希望根据表的数据结构,在jsp中输出如下形式:(理论上可能出现无限级,应该需要递归调用的!)

用户管理
增加用户
-------
-------(也可能有的菜单)
查询用户

角色管理
角色增加
角色查询

请给出算法代码!

或许这种表结构不好,那你觉得如何更好呢,谢谢你的解答!
...全文
113 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
KimSoft 2003-02-14
  • 打赏
  • 举报
回复
com.data.DBConnect 这个javabean能给我看一下吗?
xiaofenguser 2003-01-09
  • 打赏
  • 举报
回复
其它地方都是获得数据的地方,你看一看应该找得到各自对应的,把你的数据换进去就可以了.
part.jsp中的解释一下:

String part_main_id=(String)request.getAttribute("part_main_id");//获得上级ID,是从上面传来的.
String imgnum=(String)request.getAttribute("imgstr");//获得显示图片,根据情况,可以自己定,也可以不要.
Connection con=(Connection)request.getAttribute("con");//获得链接,由上面传来.
PartDB pd=new PartDB();
String imgstr="";
if(imgnum==null||imgnum.equals(""))
{
imgstr="";
}
PartVector pv=pd.executeQueryMain(con,part_main_id);//获得数据,你可以替换成自己的数据.这可以是成批的,我用Vector
PartModel pm=null;//单个数据.
for(int i=0;i<pv.size();i++)
{
pm=pv.get(i);//获得记录中的一个,你可以替换成你的.
String part_id=pm.getPart_id();//ID
String part_name=pm.getPart_name();//名字
String issubschema=pm.getIssubschema();//是否有儿子
if(issubschema!=null&&issubschema.equals("0")){//如果没有儿子.
......
}else{
//如果有儿子
.....
request.setAttribute("con",con);
request.setAttribute("imgstr","1");
request.setAttribute("part_main_id",part_id);//把本ID作为下一级的上级ID递归下去.
request.getRequestDispatcher("/tree/part.jsp") .include(request,response);
......
}
xiaofenguser 2003-01-09
  • 打赏
  • 举报
回复
呵,有个开头的,我有四个字段,一个ID(part_id),一个它的上级ID(part_main_id),一个它是否有儿子(issubschema),一个它的名字(part_name):
我把最开始的ID设为-1,即:上级ID为-1的是第一级的,
也就是这句是开头:
Connection con=new DBConnect().getConn();
request.setAttribute("con",con);//连数据库比较费时,所以我把所有的页面用一个连接,而把连接传递过去.
request.setAttribute("part_main_id","-1");
request.getRequestDispatcher("part.jsp").include(request,response);
//也就是先找到上级ID是-1的儿子

part.jsp的作用就是找到相应上级ID相应的所有儿子.

在part.jsp中也有一句:
先检测该栏目是否有儿子(我用的这个的目的主要是为了显示不同图片时用的,不想检索数据库太多次,如果都显示成一样的图片处理,这一块可以不要,而检测这一上级ID的栏目的记录是否存在,如果不存在就不往下递归).如果有
request.setAttribute("con",con);
request.setAttribute("imgstr","1");
request.setAttribute("part_main_id",part_id);
request.getRequestDispatcher("/tree/part.jsp") .include(request,response);//它是递归用的,如果有子栏目,那么就再递归找到它的儿子.


lmh79 2003-01-09
  • 打赏
  • 举报
回复
我想过了,不然我不会发出来的!
carrysilence 2003-01-09
  • 打赏
  • 举报
回复
编程的必经之路怎么能假手于人呢?

看着数据库,仔细想想怎么写,写完了,会感觉好点。
xiaofenguser 2003-01-09
  • 打赏
  • 举报
回复
你也可以不用这个,直接用<jsp:include page=...../>来做.那样要省好多句.
lmh79 2003-01-09
  • 打赏
  • 举报
回复
你这里的递归是通过getRequestDispatcher("/tree/part.jsp")来实现的,大致明白了,我可以按照你的这种方法来试一下!
xiaofenguser 2003-01-08
  • 打赏
  • 举报
回复
下面是我用的代码,给你参考一下,支持无限级.
主目录:
<%@ page language="java" contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.Connection,com.data.DBConnect"%>
<html>
<head>
<title>网站结构</title>
<style type="text/css">
<!--
.txt1 {
font-size: 9pt;
color: #000000;
text-decoration: none;
}
.txt2 {
font-size: 9pt;
color: #669999;
text-decoration: none;
}
.tr1 {
margin: 0px;
padding: 0px;
border: none;
left: 0px;
top: 0px;
right: 0px;
bottom: 0px;
clip: rect(0px 0px 0px 0px);
}
-->
</style>
<script language="JScript">
function turnit(ss,ii,aa)
{
if (ss.style.display=="none")
{
ss.style.display="";
ii.src="/tree/t2.gif";
aa.style.display="";
}
else
{
ss.style.display="none";
ii.src="/tree/t1.gif";
aa.style.display="none";
}
}
function maingo(part_id,part_name)
{
parent.mainFrame.location="/part/part_util.jsp?part_id="+part_id;
}
function mainto()
{
parent.mainFrame.location="/part/part_util.jsp?part_id=-1";
}
</script>
</head>
<body onLoad="mainto()">
网站结构
<%
Connection con=new DBConnect().getConn();
request.setAttribute("con",con);
request.setAttribute("part_main_id","-1");
request.getRequestDispatcher("part.jsp").include(request,response);
%>
</body>
</html>

//part.jsp
<%@ page language="java" contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.Connection,com.model.*,com.database.*"%>
<table width="100%" border="0" cellpadding="3" cellspacing="2" bordercolor="#FFFFFF" bgcolor="#FFFFFF" class="tr1">
<%
String part_main_id=(String)request.getAttribute("part_main_id");//?鬣???ID
String imgnum=(String)request.getAttribute("imgstr");
Connection con=(Connection)request.getAttribute("con");
PartDB pd=new PartDB();
String imgstr="";
if(imgnum==null||imgnum.equals(""))
{
imgstr="";
}
PartVector pv=pd.executeQueryMain(con,part_main_id);
PartModel pm=null;
for(int i=0;i<pv.size();i++)
{
pm=pv.get(i);
String part_id=pm.getPart_id();
String part_name=pm.getPart_name();
String issubschema=pm.getIssubschema();
if(issubschema!=null&&issubschema.equals("0")){//?T左???2|囗
%>
<tr>
<td height="26" bgcolor="#E1E1E1" class="txt2"><%=imgstr%><img src="/tree/treeimg/dot.gif" width="12" height="12"></td>
<td width="505" bgcolor="#E1E1E1" onClick="maingo('<%=part_id%>','<%=part_name%>')" style="cursor:'hand'"><%=part_name%></td>
</tr>
<%}else{//驞左???2|囗
String content1="content"+part_id;
String img1="img"+part_id;
String aux1="aux"+part_id;%>
<tr>

<td height="26" bgcolor="#E1E1E1" class="txt1" style="cursor:'hand';" onmouseup="turnit(<%=content1%>,<%=img1%>,<%=aux1%>);" language="JScript">
<%=imgstr%><img src="/tree/t1.gif" width="12" height="12" ID="<%=img1%>">
</td>
<td bgcolor="#E1E1E1" onClick="maingo('<%=part_id%>','<%=part_name%>')" style="cursor:'hand'"><%=part_name%></td>
</tr>
<tr>

<td width="22" height="26" bgcolor="#E1E1E1" class="tr1" ID="<%=aux1%>" STYLE="Display:'none';">
</td>

<td bgcolor="#E1E1E1" ID="<%=content1%>" STYLE="Display:'none';">
<%
request.setAttribute("con",con);
request.setAttribute("imgstr","1");
request.setAttribute("part_main_id",part_id);
request.getRequestDispatcher("/tree/part.jsp") .include(request,response);
%>
</td>
</tr>
<%}
}
%>
</table>
希偌 2003-01-08
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=11939
lmh79 2003-01-08
  • 打赏
  • 举报
回复
看得不怎么明白!

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧