现在正在做一个树形目录,要求由数据库生成,以前都没用过 ,请大家帮忙,急用!谢谢!代码给出来看看~

解决方案 »

  1.   

    你可以用MzTreeView.js是一个,baudu一下很多的~
    用这个可以很方便的吧数据库和树形菜单结合起来~
      

  2.   

    我也看了,但是就是看不懂,在那里关联数据库了 ~
    卡卡:还是你啊,昨天我就问你了,昨天那个magicrainbow就是我。
    里面有个指定数据源我不知道怎么关联,你能把流程告诉我吗?谢谢~
      

  3.   

    我就是不明白MzTreeView.js里面是怎么关联的,你能告诉我吗?和数据库怎么关联了,把重点告诉我下。
      

  4.   

    我给你一段代码你看看:不一定适合你用,但你参考下就可以了~这是我自己的项目里的一段
    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();
    }
      

  5.   

    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();
    }
      

  6.   

    我用的是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>
      

  7.   

    tree.js,用这个js可以实现你要的结果,我们前段时间做项目就用到了
      

  8.   

    直接用CSDN论坛左边的这个就可以了,MeiZZ(梅花雪)的大作。
      

  9.   

    ls正解^_^我用的就是梅老大的~
    <script type="text/javascript" src="js/MzTreeView10.js"></script>
    ...
      

  10.   

    我用的是dhtmlTree.js感觉效果还不错。
      

  11.   

    我这里只是需要动态菜单,
    所以给封装到Tag里了~
    如果是静态菜单的话直接在jsp里面写就OK了~
      

  12.   

    是啊 ,我就郁闷,我刚开始也是写的静态的菜单,后来说不行,不方便修改,要做个动态的。
    to :卡卡  思路是不是这样的,运用JSP从数据库里面提取数据,然后运用梅老大的JS获取这个数据,显示出来?
    要是这样的话,JS是怎么样从JSP中获取数据呢。
      

  13.   

    谁有好的代码啊,基于数据库动态生成树形目录,我给100分,谢谢了,我急用,发到我邮箱也好![email protected]再次谢谢!
      

  14.   

    <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比较简洁~
      

  15.   

    jsp+数据库的~用什么控件也好,只要能实现。
      

  16.   

    卡卡,你同事没用什么控件吗?我看了好像HibernateUtil.currentSession().connection();
    请问他实现这个就用了这个JSP和数据库吗?
      

  17.   

    技术有限,最后还是用tree.js实现的,谢谢大家帮助!以后多多帮忙哦 ,卡卡!非常谢谢你 !
      

  18.   

    我想问一下  你用tree.js怎么实现与数据库联接的阿  能不能把你的代码给我一份看看阿   我也正在做这个东西呢   谢谢了先