社区
JavaScript
帖子详情
请教!如何通过数据库显示动态树?
skyspeed7980
2003-10-19 05:29:50
我的问题是:通过数据库查询动态显示树型,每点击一层目录,发出一条查询语句到后台数据库,数据库查出的记录在刚点击过的目录的下一层显示,如此循环!有这方面的例子吗?我对javascript 还不了解!
...全文
58
5
打赏
收藏
请教!如何通过数据库显示动态树?
我的问题是:通过数据库查询动态显示树型,每点击一层目录,发出一条查询语句到后台数据库,数据库查出的记录在刚点击过的目录的下一层显示,如此循环!有这方面的例子吗?我对javascript 还不了解!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
laily
2003-11-19
打赏
举报
回复
http://www.9499.net?go=tc
skyspeed7980
2003-10-21
打赏
举报
回复
有人会吗?
skyspeed7980
2003-10-20
打赏
举报
回复
我是在struts 中开发动态菜单,需要jsp页面简单明了!
我在后台的actionbean 查询数据库,并返回一个arraylist ,arraylist中每一个object 为一个字符串,jsp页面中循环 <logic :iterate > </logic:iterate> 显示数据,但点击每一个显示的数据,将会到后台的actionbean 中,并以这个数据作为sql 查询语句的一部分(作为查询条件)再次查询数据库,数据存放在arraylist中,如此循环?
请问大虾有这方面的例子吗?
zhouguoyao
2003-10-19
打赏
举报
回复
<%@page contentType="text/html;charset=gb2312"%>
<%@page language="java" import="java.sql.*"%>
<%//设置session,提供用户登陆接口
session.setAttribute("userName","blueriver");
String topMenu;
topMenu=(String)session.getAttribute("userName");
%>
<%
String sDBDriver="sun.jdbc.odbc.JdbcOdbcDriver";
try
{
Class.forName(sDBDriver);
}
catch(java.lang.ClassNotFoundException e)
{
System.err.println(e.getMessage());
}
%>
<%!
public ResultSet executeQuery(String sql)
{
String sConnStr="jdbc:odbc:tree";
Connection conn=null;
ResultSet rs=null;
rs=null;
try
{
conn=DriverManager.getConnection(sConnStr);
Statement stmt=conn.createStatement();
rs=stmt.executeQuery(sql);
}
catch(SQLException ex)
{
System.err.println(ex.getMessage());
}
return rs;
}
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>树状菜单 </title>
<style><!--
A:link {text-decoration:none}
A:visited {text-decoration:none}
A:hover {color:#99CCFF;text-decoration:none}
-->
</style>
<script LANGUAGE="JavaScript">
<!--
//每个节点有一个数组,包含 4+n个元素
// node[0]为0/1 对应节点的展开/关闭
// node[1]为0/1 对应文件夹的关闭/展开
// node[2]为1 如果节点的子节点是文档
// node[3]是节点的名称
// node[4]...node[4+n]为n个子节点
// 初始化菜单的数据
function generateTree()
{
//var aux1, aux2, aux3, aux4
var aux
aux=new Array
foldersTree = folderNode("我的网站")
<%
//menu_id,menu_name,parent_menu_id,folder_or_file,menu_location
String sql="select * from tree_menu ";
ResultSet RS;
RS=executeQuery(sql);
try
{
while(RS.next())
{
String foldersTree;
int id=RS.getInt("menu_id");
int loc=RS.getInt("menu_location");
int parent=RS.getInt("parent_menu_id");
int folder_or_file=RS.getInt("folder_or_file");
if(loc==1){
foldersTree="foldersTree";
}else{
//foldersTree="aux"+(int)(loc-1);
foldersTree="aux["+parent+"]";
}
//if(folder_or_file==1){
//out.println("aux"+loc+" = appendChild("+foldersTree+", folderNode('<a href=main.jsp?menuid="+id+"&loc="+loc+" target=folderFrame>"+RS.getString("menu_name")+"</a>'));");
out.println("aux["+id+"]"+" = appendChild("+foldersTree+", folderNode('<a href=main.jsp?menuid="+id+"&loc="+loc+" target=folderFrame>"+RS.getString("menu_name")+"</a>'));");
//}else{
//aux[id]=appendchild(foldersTree, folderNode("<a href=main.jsp?menuid="+id+"&loc="+loc+" target=folderFrame>"+RS.getString("menu_name")+"</a>"))
//out.println("appendChild("+foldersTree+", generateDocEntry(0, '"+RS.getString("menu_name")+"', 'sample1.htm', ''));");
//}
}
}
catch(Exception e)
{
out.println(e.toString());
}
%>
}
// 创建节点的辅助函数
function folderNode(name)
{
var arrayAux
arrayAux = new Array
arrayAux[0] = 0
arrayAux[1] = 0
arrayAux[2] = 0
arrayAux[3] = name
return arrayAux
}
function leafNode(name)
{
var arrayAux
arrayAux = new Array
arrayAux[0] = 0
arrayAux[1] = 0
arrayAux[2] = 1
arrayAux[3] = name
return arrayAux
}
function appendChild(parent, child)
{
parent[parent.length] = child
return child
}
function generateDocEntry(icon, docDescription, link)
{
var retString =""
if (icon==0)
retString = "<A href='"+link+"' target=folderFrame><img src='doc.gif' alt='在右边框架中打开'"
else
retString = "<A href='"+link+"' target=_blank><img src='link.gif' alt='在新窗口中打开'"
retString = retString + " border=0></a><td nowrap><font style='font-size:9pt;font-family:宋体'>" + docDescription + "</font>"
return retString
}
//刷新树状菜单
function redrawTree()
{
var doc = top.treeFrame.window.document
doc.clear()
doc.write("<body bgcolor='white'>")
redrawNode(foldersTree, doc, 0, 1, "")
doc.close()
}
function redrawNode(foldersNode, doc, level, lastNode, leftSide)
{
var j=0
var i=0
doc.write("<table border=0 cellspacing=0 cellpadding=0>")
doc.write("<tr><td valign = middle nowrap>")
doc.write(leftSide)
if (level>0)
if (lastNode) //'brother'子节点数组中有否兄弟节点
{
doc.write("<img src='lastnode.gif' width=16 height=22>")
leftSide = leftSide + "<img src='blank.gif' width=16 height=22>"
}
else
{
doc.write("<img src='node.gif' width=16 height=22>")
leftSide = leftSide + "<img src='vertline.gif' width=16 height=22>"
}
displayIconAndLabel(foldersNode, doc)
doc.write("</table>")
if (foldersNode.length > 4 && foldersNode[0]) //有更低层的节点和文件夹展开着
{
if (!foldersNode[2])//带文件夹的文件夹
{
level=level+1
for (i=4; i<foldersNode.length;i++)
if (i==foldersNode.length-1)
redrawNode(foldersNode[i], doc, level, 1, leftSide)
else
redrawNode(foldersNode[i], doc, level, 0, leftSide)
}
else //带文档的文件夹
{
for (i=4; i<foldersNode.length;i++)
{
doc.write("<table border=0 cellspacing=0 cellpadding=0 valign=center>")
doc.write("<tr><td nowrap>")
doc.write(leftSide)
if (i==foldersNode.length - 1)
doc.write("<img src='lastnode.gif' width=16 height=22>")
else
doc.write("<img src='node.gif' width=16 height=22>")
doc.write(foldersNode[i])
doc.write("</table>")
}
}
}
}
function displayIconAndLabel(foldersNode, doc)
{
doc.write("<A href='javascript:top.openBranch(\"" + foldersNode[3] + "\")'><img src=")
if (foldersNode[1])
doc.write("openfolder.gif width=24 height=22 border=noborder></a>")
else
doc.write("closedfolder.gif width=24 height=22 border=noborder></a>")
doc.write("<td valign=middle align=left nowrap>")
doc.write("<font style='font-size:9pt;font-family:宋体'>"+foldersNode[3]+"</font>")
}
//树收拢时调用的函数
//当父节点关闭,其所有的子节点也都闭合
function closeFolders(foldersNode)
{
var i=0
if (!foldersNode[2])
{
for (i=4; i< foldersNode.length; i++)
closeFolders(foldersNode[i])
}
foldersNode[0] = 0
foldersNode[1] = 0
}
//收拢节点
function clickOnFolderRec(foldersNode, folderName)
{
var i=0
if (foldersNode[3] == folderName)
{
if (foldersNode[0])
closeFolders(foldersNode)
else
{
foldersNode[0] = 1
foldersNode[1] = 1
}
}
else
{
if (!foldersNode[2])
for (i=4; i< foldersNode.length; i++)
clickOnFolderRec(foldersNode[i], folderName)
}
}
//打开分支
function openBranch(branchName)
{
clickOnFolderRec(foldersTree, branchName)
if (branchName=="Start folder" && foldersTree[0]==0)
top.folderFrame.location="basefolder.htm"
timeOutId = setTimeout("redrawTree()",100)
}
//页面载入时的初始化
function initializeTree()
{
generateTree()
redrawTree()
}
var foldersTree = 0
var timeOutId = 0
generateTree()
-->
</script>
</HEAD>
<FRAMESET cols="200,*" onLoad='initializeTree()'>
<FRAME src="basetree.htm" name="treeFrame">
<FRAME SRC="basefolder.htm" name="folderFrame">
</FRAMESET>
<noframes>
</noframes>
</HTML>
孟子E章
2003-10-19
打赏
举报
回复
多的很啊
http://xml.sz.luohuedu.net/xml/tree/
asp.net知识库
动态
创建
数据库
SQL Server
数据库
安全规划全攻略 .net通用
数据库
访问组件SQL Artisan应用简介1 在Framework1.0下同时连接SqlServer和Oracle的一些体会 XML XPath XPath最通俗的教程(ZZ) XPath中相对路径和绝对路径...
毕业设计-基于python基于知识图谱的医疗问答系统(django)毕业设计与实现(源码+
数据库
+演示视频).zip
当然,管理员登录的界面也应该和系统的主体风格一致,设计美观大方系统在设计页面风格的过程当中,其实我也有
请教
我的美工同学,也让他帮助我进行一个主题色以及背景色的构建,那么对于管理员来说呢,主要是使用他的...
ThinkPHP5生成二维码及背景图片合成
二维码是我们在开发网站和项目的时候经常遇到的,我第一次接触二维码时,翻过许多资料,也
请教
许多所谓高人,被整的还是一头雾水,于是自己下决心一定搞明白二维码到底怎么回事,在经历许多坑,花费许多时间和精力后...
实时
数据库
简介
实时
数据库
简介 1.前言 一提到
数据库
,大家肯定会想到SQL Server、Oracle等关系型
数据库
。实际上,
数据库
的种类非常多,在计算机发展的历史上,存在着多种类型的
数据库
。 早期,关系型
数据库
与层次型
数据库
、网络...
数据库
2.
数据库
的分类2.1 关系型
数据库
2.1.1 什么是关系型
数据库
2.1.2 常见的关系型
数据库
2.2 非关系型
数据库
2.2.1 什么是非关系型
数据库
2.2.2 常见的非关系型
数据库
3.MySQL介绍3.1 MySQL介绍4.MySQL客户端服务端启动方式...
JavaScript
87,903
社区成员
224,614
社区内容
发帖
与我相关
我的任务
JavaScript
Web 开发 JavaScript
复制链接
扫一扫
分享
社区描述
Web 开发 JavaScript
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章