50分求代码数据库动态生成树形目录,显示在JSP页面上!谢谢! 现在正在做一个树形目录,要求由数据库生成,以前都没用过 ,请大家帮忙,急用!谢谢!代码给出来看看~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你可以用MzTreeView.js是一个,baudu一下很多的~用这个可以很方便的吧数据库和树形菜单结合起来~ 我也看了,但是就是看不懂,在那里关联数据库了 ~卡卡:还是你啊,昨天我就问你了,昨天那个magicrainbow就是我。里面有个指定数据源我不知道怎么关联,你能把流程告诉我吗?谢谢~ 我就是不明白MzTreeView.js里面是怎么关联的,你能告诉我吗?和数据库怎么关联了,把重点告诉我下。 我给你一段代码你看看:不一定适合你用,但你参考下就可以了~这是我自己的项目里的一段1,private String buildIcons(Collection<Menu> menuCollection) throws Exception{ StringBuilder sb = new StringBuilder(""); List<String> iconList = new ArrayList<String>(); for (Menu menu : menuCollection) { String icon = menu.getIcon(); if (icon == null || icon.trim().equals("") || icon.trim().equals(";")){ continue; } if (icon.indexOf(";") == 0) {//只有打开图标不符合,用默认图标 continue; }else if (icon.indexOf(";") == icon.length() - 1) { String iconname = icon.substring(0, icon.length() - 1); String iconname1 = iconname.split("\\.")[0]; if (!iconList.contains(iconname)) { sb.append("tree.icons[\""); sb.append(iconname1); sb.append("\"] = \""); sb.append(iconname); sb.append("\";\n"); iconList.add(iconname1); } }else{ String[] icons = icon.trim().split(";"); String name0 = icons[0].split("\\.")[0]; if (!iconList.contains(name0)) { sb.append("tree.icons[\""); sb.append(name0); sb.append("\"] = \""); sb.append(icons[0]); sb.append("\";\n"); sb.append("tree.iconsExpand[\""); sb.append(name0); sb.append("\"] = \""); sb.append(icons[1]); sb.append("\";\n"); iconList.add(name0); } } } return sb.toString(); } 2,private String buildTreeMenu(Collection<Menu> menuCollection) throws Exception { StringBuilder sb = new StringBuilder(""); sb.append("<script language=\"JavaScript\">\n"); sb.append("var tree = new MzTreeView(\"tree\");\n"); //以下三步不能换位置 //1,创建自定义图标库 sb.append(buildIcons(menuCollection)); //2,设定图标库路径 sb.append("tree.setIconPath(\""); sb.append(imagePath); sb.append("\"); \n"); //3,设定节点属性 for (Menu menu : menuCollection) { String nodeInfo = ""; String text = menu.getText(); if (text != null && !text.equals("")) { nodeInfo += "text:" + text + ";"; } Long id = menu.getId(); Long pId = menu.getParentId(); String hint = menu.getHint(); if (hint != null && !hint.equals("")) { nodeInfo += "hint:" + hint + ";"; } String icon = menu.getIcon(); if (icon != null && !icon.trim().equals("") && icon.trim().length() > 1) { if (icon.indexOf(";") == 0) {//只有打开图标不符合,用默认图标 continue; } else if (icon.indexOf(";") == icon.length() - 1) { String iconname = icon.substring(0, icon.length() - 1); String iconname1 = iconname.split("\\.")[0]; nodeInfo += "icon:" + iconname1 + ";"; } else { String[] icons = icon.trim().split(";"); String name0 = icons[0].split("\\.")[0]; nodeInfo += "icon:" + name0 + ";"; } } String data = menu.getData(); if (data != null && !data.trim().equals("")){ nodeInfo += "data:" + data + ";\n"; }else{ nodeInfo += "data:id=" + id + "&name=" + URLEncoder.encode(text,"utf-8") + ";"; } String url = menu.getUrl(); if (url != null && !url.trim().equals("")){ nodeInfo += "url:" + url + ";"; } String target = menu.getTarget(); if (target != null && !target.trim().equals("")){ nodeInfo += "target:" + target + ";"; } String method = menu.getMethod(); if (method !=null && !method.trim().equals("")){ String methodName = method.split("\\(")[0]; if (methodName.indexOf("javascript:") == -1){ methodName = "javascript:" + methodName; } if (method != null && !method.trim().equals("")){ nodeInfo += "method:" + methodName + "(" + id + ",'" + text + "');"; } } nodeInfo += "\";"; sb.append("tree.nodes[\""); sb.append(pId); sb.append("_"); sb.append(id); sb.append("\"] = \""); sb.append(nodeInfo); sb.append("\n"); } sb.append("tree.setURL(\""); sb.append(defaultUrl); sb.append("\");\n"); sb.append("tree.setTarget(\""); sb.append(defaultTegart); sb.append("\");\n"); sb.append("document.write(tree.toString());\n"); sb.append("</script>\n"); return sb.toString(); } 我用的是TagLib写的,// 菜单数据private Collection<Menu> menuCollection;menuCollection就是从数据库取出来的菜单数据~3,页面:<%@ page language="java" pageEncoding="UTF-8"%><jsp:directive.page import="java.util.List"/><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %><%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %><%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %><%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %><%@ taglib uri="http://www.daniel.com/tree-menu" prefix="tree-menu" %><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><html> <head> <base href="<%=basePath%>"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> <script type="text/javascript" src="js/MzTreeView10.js"></script> <script language="JavaScript"> function showMessage(id,name){ alert(id+","+name); } </script> <style> A.MzTreeView{ font-size: 9pt; padding-left: 3px; } </style> </head> <body> <% List treeMenuList = (List)request.getAttribute("treeMenuList"); %> <div> <tree-menu:showMenu menuCollection="<%=treeMenuList%>"/> </div> </body></html> tree.js,用这个js可以实现你要的结果,我们前段时间做项目就用到了 直接用CSDN论坛左边的这个就可以了,MeiZZ(梅花雪)的大作。 ls正解^_^我用的就是梅老大的~<script type="text/javascript" src="js/MzTreeView10.js"></script>... 我用的是dhtmlTree.js感觉效果还不错。 我这里只是需要动态菜单,所以给封装到Tag里了~如果是静态菜单的话直接在jsp里面写就OK了~ 是啊 ,我就郁闷,我刚开始也是写的静态的菜单,后来说不行,不方便修改,要做个动态的。to :卡卡 思路是不是这样的,运用JSP从数据库里面提取数据,然后运用梅老大的JS获取这个数据,显示出来?要是这样的话,JS是怎么样从JSP中获取数据呢。 谁有好的代码啊,基于数据库动态生成树形目录,我给100分,谢谢了,我急用,发到我邮箱也好![email protected]再次谢谢! <table width="70%" border="1" style="border-collapse: collapse" align="center" cellspacing="0" cellpadding="0"> <tr> <td> <script language="JavaScript"> var tree = new MzTreeView("tree"); tree.wordLine = false; tree.icons["property"] = "property.gif"; tree.icons["css"] = "collection.gif"; //根 tree.icons["file"] = "folder.gif"; tree.iconsExpand["file"] = "folderopen.gif"; //展开时对应的图片 tree.icons["fornm"] = "Forum_nav.gif"; //tree.icons["book"] = "book.gif"; tree.icons["book"] = "bookopen.gif"; tree.iconsExpand["book"] = "bookopen.gif"; //展开时对应的图片 tree.setIconPath("/iscsystem/iscsystem/images/"); //可用相对路径 tree.nodes["0_1"] = "text:群成员(点击刷新); method:javascript:refurbish();"; <% try { //一级 String id = WebContext.getCurrentUser().getName(); String sql1 = "select id,name,parentId,memo from isc_group where status=1 and memo=0 and lastUpdateUser='"+ id +"' order by createTime desc"; Connection connection = HibernateUtil.currentSession().connection(); Statement statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet rs = statement.executeQuery(sql1); //out.println(rs); int j = 100; int i = 10; int k = 1000; if (rs.next()) { rs.previous(); while (rs.next()) { out.println("tree.nodes[\"1_" + i + "\"] = \"text:" + rs.getString("name") + "; url:/iscsystem/iscsystem/toUserList.do?id="+ rs.getString("id") +";\";"); //2级 String sql2 = "select id,name,parentId,memo from isc_group where status=1 and memo=1 and parentId='" + rs.getString("id") + "' and lastUpdateUser='"+ id +"' order by createTime desc"; Statement statement2 = connection.createStatement(); ResultSet rs2 = statement2.executeQuery(sql2); if (rs2.next()) { rs2.previous(); while (rs2.next()) { out.println("tree.nodes[\"" + i + "_" + j + "\"] = \"text:" + rs2.getString("name") + "; url:/iscsystem/iscsystem/toUserList.do?id="+ rs2.getString("id") +";\";"); //3级 String sql3 = "select id,name,parentId,memo from isc_group where status=1 and memo=2 and parentId='" + rs2.getString("id") + "' and lastUpdateUser='"+ id +"' order by createTime desc"; Statement statement3 = connection.createStatement(); ResultSet rs3 = statement3.executeQuery(sql3); if (rs3.next()) { rs3.previous(); while (rs3.next()) { out.println("tree.nodes[\"" + j + "_" + k + "\"] = \"text:" + rs3.getString("name") + "; url:/iscsystem/iscsystem/toUserList.do?id="+ rs3.getString("id") +";\";"); k++; } } j++; } } i++; } } } catch (Exception e) { } %> //tree.setURL("Catalog.asp"); tree.setTarget("basefrm"); document.write(tree.toString()); //亦可用 obj.innerHTML = tree.toString(); // tree.focus(1); tree.expandAll(); tree.expand(1, true); </script> </td> </tr> </table>这是我的一个同事写的,他是在jsp中直接取数据库中的数据~我不习惯这样写,还是用Tag比较简洁~ jsp+数据库的~用什么控件也好,只要能实现。 卡卡,你同事没用什么控件吗?我看了好像HibernateUtil.currentSession().connection();请问他实现这个就用了这个JSP和数据库吗? 技术有限,最后还是用tree.js实现的,谢谢大家帮助!以后多多帮忙哦 ,卡卡!非常谢谢你 ! 我想问一下 你用tree.js怎么实现与数据库联接的阿 能不能把你的代码给我一份看看阿 我也正在做这个东西呢 谢谢了先 如何判断是手机访问网站还是电脑访问网站 关于用String类型获取Date类型的数据,或者反过来 买过oracle正版的大虾请进来下。谢谢 如何读word中的图片?狂研究jacob中 BufferedWriter 不能向文件中写入重复信息! 有人做过带水平滚动条的下拉框吗? 用j2sdk编译servlet还是找不到javax.servlet.http.*包!!! 急!在线等!!!!!! 如何接受参数? JS导出table数据 properties文件中能否写注释? 求救!Servlet运行出错!Wrapper cannot find servlet class 我快疯了
用这个可以很方便的吧数据库和树形菜单结合起来~
卡卡:还是你啊,昨天我就问你了,昨天那个magicrainbow就是我。
里面有个指定数据源我不知道怎么关联,你能把流程告诉我吗?谢谢~
1,
private String buildIcons(Collection<Menu> menuCollection) throws Exception{
StringBuilder sb = new StringBuilder("");
List<String> iconList = new ArrayList<String>();
for (Menu menu : menuCollection) {
String icon = menu.getIcon();
if (icon == null || icon.trim().equals("") || icon.trim().equals(";")){
continue;
}
if (icon.indexOf(";") == 0) {//只有打开图标不符合,用默认图标
continue;
}else if (icon.indexOf(";") == icon.length() - 1) {
String iconname = icon.substring(0, icon.length() - 1);
String iconname1 = iconname.split("\\.")[0];
if (!iconList.contains(iconname)) {
sb.append("tree.icons[\"");
sb.append(iconname1);
sb.append("\"] = \"");
sb.append(iconname);
sb.append("\";\n");
iconList.add(iconname1);
}
}else{
String[] icons = icon.trim().split(";");
String name0 = icons[0].split("\\.")[0];
if (!iconList.contains(name0)) {
sb.append("tree.icons[\"");
sb.append(name0);
sb.append("\"] = \"");
sb.append(icons[0]);
sb.append("\";\n");
sb.append("tree.iconsExpand[\"");
sb.append(name0);
sb.append("\"] = \"");
sb.append(icons[1]);
sb.append("\";\n"); iconList.add(name0);
}
}
}
return sb.toString();
}
StringBuilder sb = new StringBuilder("");
sb.append("<script language=\"JavaScript\">\n");
sb.append("var tree = new MzTreeView(\"tree\");\n");
//以下三步不能换位置
//1,创建自定义图标库
sb.append(buildIcons(menuCollection));
//2,设定图标库路径
sb.append("tree.setIconPath(\"");
sb.append(imagePath);
sb.append("\"); \n");
//3,设定节点属性
for (Menu menu : menuCollection) {
String nodeInfo = "";
String text = menu.getText();
if (text != null && !text.equals("")) {
nodeInfo += "text:" + text + ";";
}
Long id = menu.getId();
Long pId = menu.getParentId();
String hint = menu.getHint();
if (hint != null && !hint.equals("")) {
nodeInfo += "hint:" + hint + ";";
}
String icon = menu.getIcon();
if (icon != null && !icon.trim().equals("") && icon.trim().length() > 1) {
if (icon.indexOf(";") == 0) {//只有打开图标不符合,用默认图标
continue;
} else if (icon.indexOf(";") == icon.length() - 1) {
String iconname = icon.substring(0, icon.length() - 1);
String iconname1 = iconname.split("\\.")[0];
nodeInfo += "icon:" + iconname1 + ";";
} else {
String[] icons = icon.trim().split(";");
String name0 = icons[0].split("\\.")[0];
nodeInfo += "icon:" + name0 + ";";
}
}
String data = menu.getData();
if (data != null && !data.trim().equals("")){
nodeInfo += "data:" + data + ";\n";
}else{
nodeInfo += "data:id=" + id + "&name=" + URLEncoder.encode(text,"utf-8") + ";";
}
String url = menu.getUrl();
if (url != null && !url.trim().equals("")){
nodeInfo += "url:" + url + ";";
}
String target = menu.getTarget();
if (target != null && !target.trim().equals("")){
nodeInfo += "target:" + target + ";";
}
String method = menu.getMethod();
if (method !=null && !method.trim().equals("")){
String methodName = method.split("\\(")[0];
if (methodName.indexOf("javascript:") == -1){
methodName = "javascript:" + methodName;
}
if (method != null && !method.trim().equals("")){
nodeInfo += "method:" + methodName + "(" + id + ",'" + text + "');";
}
}
nodeInfo += "\";";
sb.append("tree.nodes[\"");
sb.append(pId);
sb.append("_");
sb.append(id);
sb.append("\"] = \"");
sb.append(nodeInfo);
sb.append("\n");
}
sb.append("tree.setURL(\"");
sb.append(defaultUrl);
sb.append("\");\n");
sb.append("tree.setTarget(\"");
sb.append(defaultTegart);
sb.append("\");\n");
sb.append("document.write(tree.toString());\n");
sb.append("</script>\n"); return sb.toString();
}
// 菜单数据
private Collection<Menu> menuCollection;
menuCollection就是从数据库取出来的菜单数据~3,页面:
<%@ page language="java" pageEncoding="UTF-8"%>
<jsp:directive.page import="java.util.List"/>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>
<%@ taglib uri="http://www.daniel.com/tree-menu" prefix="tree-menu" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
<head>
<base href="<%=basePath%>">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<script type="text/javascript" src="js/MzTreeView10.js"></script>
<script language="JavaScript">
function showMessage(id,name){
alert(id+","+name);
}
</script>
<style>
A.MzTreeView{
font-size: 9pt;
padding-left: 3px;
}
</style>
</head>
<body>
<%
List treeMenuList = (List)request.getAttribute("treeMenuList");
%>
<div>
<tree-menu:showMenu menuCollection="<%=treeMenuList%>"/>
</div>
</body>
</html>
<script type="text/javascript" src="js/MzTreeView10.js"></script>
...
所以给封装到Tag里了~
如果是静态菜单的话直接在jsp里面写就OK了~
to :卡卡 思路是不是这样的,运用JSP从数据库里面提取数据,然后运用梅老大的JS获取这个数据,显示出来?
要是这样的话,JS是怎么样从JSP中获取数据呢。
<tr>
<td>
<script language="JavaScript">
var tree = new MzTreeView("tree"); tree.wordLine = false; tree.icons["property"] = "property.gif";
tree.icons["css"] = "collection.gif";
//根
tree.icons["file"] = "folder.gif";
tree.iconsExpand["file"] = "folderopen.gif"; //展开时对应的图片 tree.icons["fornm"] = "Forum_nav.gif";
//tree.icons["book"] = "book.gif";
tree.icons["book"] = "bookopen.gif";
tree.iconsExpand["book"] = "bookopen.gif"; //展开时对应的图片 tree.setIconPath("/iscsystem/iscsystem/images/"); //可用相对路径
tree.nodes["0_1"] = "text:群成员(点击刷新); method:javascript:refurbish();"; <%
try {
//一级
String id = WebContext.getCurrentUser().getName();
String sql1 = "select id,name,parentId,memo from isc_group where status=1 and memo=0 and lastUpdateUser='"+ id +"' order by createTime desc";
Connection connection = HibernateUtil.currentSession().connection(); Statement statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
ResultSet rs = statement.executeQuery(sql1);
//out.println(rs);
int j = 100;
int i = 10;
int k = 1000;
if (rs.next()) {
rs.previous();
while (rs.next()) {
out.println("tree.nodes[\"1_" + i + "\"] = \"text:" + rs.getString("name") + "; url:/iscsystem/iscsystem/toUserList.do?id="+ rs.getString("id") +";\";");
//2级
String sql2 = "select id,name,parentId,memo from isc_group where status=1 and memo=1 and parentId='" + rs.getString("id") + "' and lastUpdateUser='"+ id +"' order by createTime desc";
Statement statement2 = connection.createStatement();
ResultSet rs2 = statement2.executeQuery(sql2);
if (rs2.next()) { rs2.previous();
while (rs2.next()) {
out.println("tree.nodes[\"" + i + "_" + j + "\"] = \"text:" + rs2.getString("name") + "; url:/iscsystem/iscsystem/toUserList.do?id="+ rs2.getString("id") +";\";");
//3级
String sql3 = "select id,name,parentId,memo from isc_group where status=1 and memo=2 and parentId='" + rs2.getString("id") + "' and lastUpdateUser='"+ id +"' order by createTime desc";
Statement statement3 = connection.createStatement();
ResultSet rs3 = statement3.executeQuery(sql3);
if (rs3.next()) { rs3.previous();
while (rs3.next()) {
out.println("tree.nodes[\"" + j + "_" + k + "\"] = \"text:" + rs3.getString("name") + "; url:/iscsystem/iscsystem/toUserList.do?id="+ rs3.getString("id") +";\";"); k++;
} }
j++;
} }
i++;
}
}
} catch (Exception e) {
}
%>
//tree.setURL("Catalog.asp");
tree.setTarget("basefrm"); document.write(tree.toString()); //亦可用 obj.innerHTML = tree.toString();
// tree.focus(1);
tree.expandAll();
tree.expand(1, true);
</script>
</td>
</tr>
</table>这是我的一个同事写的,他是在jsp中直接取数据库中的数据~
我不习惯这样写,还是用Tag比较简洁~
请问他实现这个就用了这个JSP和数据库吗?