请教!如何通过数据库显示动态树? 多的很啊http://xml.sz.luohuedu.net/xml/tree/ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 <%@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, aux4var auxaux=new ArrayfoldersTree = 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=0var 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 = 0var timeOutId = 0generateTree() --></script></HEAD><FRAMESET cols="200,*" onLoad='initializeTree()'> <FRAME src="basetree.htm" name="treeFrame"> <FRAME SRC="basefolder.htm" name="folderFrame"></FRAMESET><noframes></noframes> </HTML> 我是在struts 中开发动态菜单,需要jsp页面简单明了!我在后台的actionbean 查询数据库,并返回一个arraylist ,arraylist中每一个object 为一个字符串,jsp页面中循环 <logic :iterate > </logic:iterate> 显示数据,但点击每一个显示的数据,将会到后台的actionbean 中,并以这个数据作为sql 查询语句的一部分(作为查询条件)再次查询数据库,数据存放在arraylist中,如此循环?请问大虾有这方面的例子吗? 关于百度贴吧 抢楼 关于JS换行 Jquery的一个问题 将信息存入cookie时,是不是都是用uri编码呀,如果这样的话,安全性如何保证呢? js怎样实现多行文本框里输入的文字,每段前插入两个空格? 机顶盒不支持js怎么办?请高手解决! 在线等...马上要搞定的问题. 请问怎样在动态插入行是给行设置ID,然后用该ID改变改行的CLASS,代码如下。谢谢各位了! http://www.ttjj.com/index.php,这个网址吧我的机子整惨了,求救! jqgrid增加、编辑和删除问题 如何删除HTML对象?比如:<div>~~ 请问:如何用javascript实现一个静态的树呢?
<%@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 ArrayfoldersTree = 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>
我在后台的actionbean 查询数据库,并返回一个arraylist ,arraylist中每一个object 为一个字符串,jsp页面中循环 <logic :iterate > </logic:iterate> 显示数据,但点击每一个显示的数据,将会到后台的actionbean 中,并以这个数据作为sql 查询语句的一部分(作为查询条件)再次查询数据库,数据存放在arraylist中,如此循环?
请问大虾有这方面的例子吗?