JSP 树状菜单

本文介绍了如何利用JSP动态生成JavaScript树形菜单。通过创建数据库表`tree_info`存储节点信息,编写Java类`TreeInfo`和`TreeUtil`从数据库获取并转换为JavaScript数组,然后定义两个自定义标签`InitTreeTag`和`ShowTreeTag`,在JSP中调用这些标签来展示树形菜单。示例中提供了完整的数据库脚本、Java代码和JSP页面结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1)初始化菜单 <script type="text/javascript">  <!--  var Tree = new Array;  // nodeId | parentNodeId | nodeName | nodeUrl  Tree[0]  = "1|0|Page 1|#";  Tree[1]  = "2|1|Page 1.1|#";  Tree[2]  = "3|1|Page 1.2|#";  Tree[3]  = "4|3|Page 1.2.1|#";  Tree[4]  = "5|1|Page 1.3|#";  Tree[5]  = "6|2|Page 1.1.1|#";  Tree[6]  = "7|6|Page 1.1.1.1|#";  Tree[7]  = "8|6|Page 1.1.1.2|#";  Tree[8]  = "9|1|Page 1.4|#";  Tree[9]  = "10|9|Page 1.4.1|#";  Tree[10] = "11|0|Page 2|#";  //--> </script> 2)调用函数 <div class="tree">  <script type="text/javascript">  <!--   createTree(Tree,1,7);  // starts the tree at the top and open it at node nr. 7  //-->  </script> </div>  显然,如果用动态的脚本来初始化菜单数组(asp,jsp均可),那就可以很方便的实现动态的树型菜单了。 2。jsp动态实现   分以下步骤实现动态的树型菜单:   1)在数据库建tree_info表,有nodeId,parentNodeId,nodeName,nodeUrl四个字段,来存储节点信息。   2)编写java类,用于从数据库找出节点信息,并且生成javascript脚本。   3)编写tag类。用于封装逻辑,简化jsp的开发。   4)建一个web程序进行测试。 3。详细过程   1)在数据库建表,脚本如下:   CREATE TABLE `test`.`tree_info` (   `node_id` INTEGER UNSIGNED NOT NULL DEFAULT -1,   `parent_id` INTEGER UNSIGNED NOT NULL DEFAULT -1,   `node_name` VARCHAR(45) NOT NULL,   `ref_url` VARCHAR(45) NOT NULL,   PRIMARY KEY(`node_id`) ) 我使用mysql数据库,如果脚本细节有出入,请自行修改    按照上面的dTree示例插入数据   2)编写TreeInfo.java,这个类用于封装节点信息     package com.diegoyun.web.tree;  /**   * @author Diegoyun   * @version 1.0   */  public class TreeInfo {   private int nodeId = -1;//node id   private int parentId = -1;//parentId   private String nodeName = null;//node name   private String url = null;//url references    public int getNodeId() {    return nodeId;   }    public void setNodeId(int nodeId) {    this.nodeId = nodeId;   }    public int getParentId() {    return parentId;   }    public void setParentId(int parentId) {    this.parentId = parentId;   }    public String getNodeName() {    return nodeName;   }    public void setNodeName(String nodeName) {    this.nodeName = nodeName;   }    public String getUrl() {    return url;   }    public void setUrl(String url) {    this.url = url;   }   }   编写TreeUtil.java,用于从数据库得到节点信息,封装到TreeInfo对象,并生成javascript脚本   TreeUtil.java   package com.diegoyun.web.tree;  import java.util.Collection;  import java.util.ArrayList;  import java.util.Iterator;  import java.util.List;  import java.sql.PreparedStatement;  import java.sql.ResultSet;  import java.sql.Connection;  import java.sql.DriverManager;   /**   * @author Diegoyun   * @version 1.0   */  public class TreeUtil {   public static List retrieveNodeInfos(){    List coll = new ArrayList();     String driverName = "com.mysql.jdbc.Driver";    String host = "localhost";    String port = ":3306";    String serverID = "test";    String userName = "root";    String userPwd = "root";    String url = "jdbc:mysql://" + host + port + "/" + serverID ;     Connection conn = null ;    PreparedStatement ps = null;    ResultSet rs = null;    try{     Class.forName(driverName).newInstance();     conn = DriverManager.getConnection(url , userName , userPwd);     String sql = "select * from tree_info";     ps = conn.prepareStatement(sql);     rs = ps.executeQuery();      TreeInfo info = null;     while(rs!=null && rs.next()){      info = new TreeInfo();      info.setNodeId(rs.getInt(1));      info.setParentId(rs.getInt(2));      info.setNodeName(rs.getString(3));      info.setUrl(rs.getString(4));      coll.add(info);     }  //            if(rs!=null){  //                rs.close();  //                rs=null;  //            }  //            if(ps!=null){  //                ps.close();  //                ps=null;  //            }    }catch(Exception e){     System.out.println(e);    }     return coll;   }   public static String createTreeInfo(List alist){    StringBuffer contents = new StringBuffer();    contents.append("<!--/n");    contents.append("var Tree = new Array;");//create a array in javascript    TreeInfo info =null;    for(int max = alist.size(),i=0;i<max;i++){     info = (TreeInfo)alist.get(i);     //define elements of array     contents.append("Tree[");     contents.append(i);     contents.append("]=/"");     contents.append(info.getNodeId());     contents.append("|");     contents.append(info.getParentId());     contents.append("|");     contents.append(info.getNodeName());     contents.append("|");     contents.append(info.getUrl());     contents.append("/";");    } contents.append("docment.writer(Tree);");    contents.append("//-->");     return contents.toString();   }   public static void main(String[]args){    List alist = TreeUtil.retrieveNodeInfos();  //        TreeInfo info = null;  //        for(Iterator i = c.iterator();i.hasNext();){  //            info = (TreeInfo)i.next();  //            System.out.println("*****" + info.getNodeName());  //        }    System.out.println(TreeUtil.createTreeInfo(alist));   }  }  3)编写标签类 InitTreeTag.java package com.diegoyun.web.taglibs; import com.diegoyun.web.tree.TreeUtil; import javax.servlet.jsp.tagext.TagSupport; import javax.servlet.jsp.JspException; import java.io.IOException;  /**  * @author Diegoyun  * @version 1.0  */ public class InitTreeTag extends TagSupport{   public int doEndTag() throws JspException {   StringBuffer tree = new StringBuffer();   tree.append("<script type=/"text/javascript/">/n");   tree.append(TreeUtil.createTreeInfo(TreeUtil.retrieveNodeInfos()));   tree.append("</script>/n");   try{    pageContext.getOut().println(tree.toString());   }catch(IOException ioe){    ioe.printStackTrace();   }   return super.doEndTag();  } }  ShowTreeTag.java :  package com.diegoyun.web.taglibs;  import javax.servlet.jsp.tagext.TagSupport; import javax.servlet.jsp.JspException; import java.io.IOException;  /**  * @author Diegoyun  * @version 1.0  */ public class ShowTreeTag extends TagSupport{  public int doEndTag() throws JspException {   StringBuffer buffer = showTree();   try {    pageContext.getOut().println(buffer.toString());   }   catch (IOException ioe) {    ioe.printStackTrace();   }   return super.doEndTag();  }  private StringBuffer showTree(){   StringBuffer sb = new StringBuffer();   sb.append("<div class=/"tree/">/n");   sb.append("<script type=/"text/javascript/">/n");   sb.append("<!--/n");   sb.append("createTree(Tree);/n");   sb.append("//-->/n");   sb.append("</script>/n");   sb.append("</div>/n");   return sb;  }   }  标签的tld如下: <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE taglib   PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"   "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> <taglib>  <tlib-version>1.0</tlib-version>  <jsp-version>1.2</jsp-version>  <short-name>tree</short-name>  <!--initTreeTag-->  <tag>   <name>init</name>   <tag-class>com.diegoyun.web.taglibs.InitTreeTag</tag-class>   <body-content>empty</body-content>  </tag>  <!--ShowTreeTag-->  <tag>   <name>show</name>   <tag-class>com.diegoyun.web.taglibs.ShowTreeTag</tag-class>   <body-content>empty</body-content>  </tag> </taglib>  4)建立web过程,编写jsp进行测试。  index.jsp如下: <%@ page language="java"%> <%@ taglib uri="/WEB-INF/tlds/tree.tld" prefix="tree"%>  <html> <head>  <title>Tree example</title>  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">  <link rel="StyleSheet" href="tree.css" type="text/css">  <script type="text/javascript" src="tree.js"></script>  <tree:init/> </head>  <body>  <b>Tree example :</b><br /><br /> <tree:show/> <br /><br />   </body> </html>  测试,enjoy yourself! 4。待解决问题 dTree有点小bug,如果把css,img,js的路径改变,树就有可能不会正确显示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值