簡單的自訂標籤實現樹結構的小功能

來源:互聯網
上載者:User

最近做了個小功能,用dtree.js做了個樹結構,用自訂標籤做的,也是參照網上的例子。

具體實現如下:

TreeUtil.java (樹結構目錄資料處理類)

package cl.mytree;</p><p>import java.util.Collection;<br />import java.util.ArrayList;<br />import java.util.Iterator;<br />import java.util.List;<br />import java.sql.PreparedStatement;<br />import java.sql.ResultSet;<br />import java.sql.Connection;<br />import java.sql.DriverManager;</p><p>/**<br /> * 為樹結構目錄提供資料來源<br /> * @author Diegoyun<br /> * @version 1.0<br /> */<br />public class TreeUtil {</p><p>/**<br /> * 讀取資料庫內容,填充LIST(MYSQL)<br /> *<br /> * @return<br /> */<br />public static List retrieveNodeInfos() {<br />List coll = new ArrayList();<br />String driverName = "com.mysql.jdbc.Driver";<br />String host = "localhost";<br />String port = ":3306";<br />String serverID = "test";<br />String userName = "root";<br />String userPwd = "root";<br />String url = "jdbc:mysql://" + host + port + "/" + serverID;<br />Connection conn = null;<br />PreparedStatement ps = null;<br />ResultSet rs = null;<br />try {<br />Class.forName(driverName).newInstance();<br />conn = DriverManager.getConnection(url, userName, userPwd);<br />String sql = "select * from tree_info";<br />ps = conn.prepareStatement(sql);<br />rs = ps.executeQuery();<br />TreeInfo info = null;<br />while (rs != null && rs.next()) {<br />info = new TreeInfo();<br />info.setNodeId(rs.getInt(1));<br />info.setParentId(rs.getInt(2));<br />info.setNodeName(rs.getString(3));<br />info.setUrl(rs.getString(4));<br />coll.add(info);<br />}<br />// if(rs!=null){<br />// rs.close();<br />// rs=null;<br />// }<br />// if(ps!=null){<br />// ps.close();<br />// ps=null;<br />// }<br />} catch (Exception e) {<br />System.out.println(e);<br />}</p><p>return coll;<br />}</p><p>/**<br /> * 讀取資料庫內容,填充LIST(ORACLE)<br /> *<br /> * @return<br /> */<br />public static List retrieveNodeInfos4Oracle() {<br />List coll = new ArrayList();<br />String driverName = "oracle.jdbc.driver.OracleDriver";<br />String host = "localhost";<br />String port = ":1521";<br />String serverID = "MYDB";<br />String userName = "YFFW_TEST";<br />String userPwd = "YFFW_TEST";<br />String url = "jdbc:oracle:thin:@" + host + port + ":" + serverID;<br />Connection conn = null;<br />PreparedStatement ps = null;<br />ResultSet rs = null;<br />try {<br />Class.forName(driverName).newInstance();<br />conn = DriverManager.getConnection(url, userName, userPwd);<br />String sql = "select * from tree_info";<br />ps = conn.prepareStatement(sql);<br />rs = ps.executeQuery();<br />TreeInfo info = null;<br />while (rs != null && rs.next()) {<br />info = new TreeInfo();<br />info.setNodeId(rs.getInt(1));<br />info.setParentId(rs.getInt(2));<br />info.setNodeName(rs.getString(3));<br />info.setUrl(rs.getString(4));<br />coll.add(info);<br />}<br />} catch (Exception e) {<br />System.out.println(e);<br />}<br />return coll;<br />}</p><p>/**<br /> * 為查詢的資訊建立樹結構資訊(基於dTree)<br /> * @param list<br /> * @return<br /> */<br />public static String createTreeInfo4Dtree(List list){<br />StringBuffer contents = new StringBuffer();<br />contents.append("<!--/n");<br />contents.append("dTree = new dTree();/n");// create a array in<br />// javascript<br />TreeInfo info = null;<br />//todo<br />info = new TreeInfo();<br />info.setNodeId(-1);<br />info.setNodeName("控制台");<br />info.setParentId(-2);<br />info.setUrl("#");<br />contents.append("dTree.add("+info.getNodeId()+","+info.getParentId()+",'"+info.getNodeName()+"');"+"/n");<br />for(int max = list.size(),i=0;i<max;i++){<br />info = (TreeInfo) list.get(i);<br />contents.append("dTree.add("+info.getNodeId()+","+info.getParentId()+",'"+info.getNodeName()+"');"+"/n");<br />}<br />contents.append("-->/n");</p><p>return contents.toString();<br />}</p><p>public static void main(String[] args) {<br />List alist = TreeUtil.retrieveNodeInfos4Oracle();<br />System.out.println(TreeUtil.createTreeInfo4Dtree(alist));<br />}<br />}<br />  

 

在資料庫中建立TREE_INFO的表,欄位為:NODE_ID INTEGER,PARENT_ID INTEGER,NODE_NAME VARCHAR(20),URL VARCHAR(50),並插入資料  

 

TreeInfo.java(實體類)

package cl.mytree;</p><p>/**<br /> * @author Diegoyun<br /> * @version 1.0<br /> */<br />public class TreeInfo {<br />private int nodeId = -1;// node id</p><p>private int parentId = -1;// parentId</p><p>private String nodeName = null;// node name</p><p>private String url = null;// url references</p><p>public int getNodeId() {<br />return nodeId;<br />}</p><p>public void setNodeId(int nodeId) {<br />this.nodeId = nodeId;<br />}</p><p>public int getParentId() {<br />return parentId;<br />}</p><p>public void setParentId(int parentId) {<br />this.parentId = parentId;<br />}</p><p>public String getNodeName() {<br />return nodeName;<br />}</p><p>public void setNodeName(String nodeName) {<br />this.nodeName = nodeName;<br />}</p><p>public String getUrl() {<br />return url;<br />}</p><p>public void setUrl(String url) {<br />this.url = url;<br />}<br />}

 

InitTreeTag(自訂標籤類):

package cl.mytree;</p><p>import javax.servlet.jsp.tagext.TagSupport;<br />import javax.servlet.jsp.JspException;<br />import java.io.IOException;<br />/**<br /> * @author Diegoyun<br /> * @version 1.0<br /> */<br />public class InitTreeTag extends TagSupport{<br /> public int doEndTag() throws JspException {<br /> StringBuffer tree = new StringBuffer();<br /> tree.append("<mce:script type=/"text/javascript/"><!--<br />/n");<br /> tree.append(TreeUtil.createTreeInfo4Dtree(TreeUtil.retrieveNodeInfos4Oracle()));<br /> tree.append("<br />// --></mce:script>/n");<br /> try{<br /> pageContext.getOut().println(tree.toString());<br /> }catch(IOException ioe){<br /> ioe.printStackTrace();<br /> }<br /> return super.doEndTag();<br /> }<br />} </p><p>

 

ShowTreeTag(自訂標籤類):

package cl.mytree;</p><p>import java.io.IOException;</p><p>import javax.servlet.jsp.tagext.TagSupport;<br />import javax.servlet.jsp.JspException;<br />import java.io.IOException;</p><p>public class ShowTreeTag extends TagSupport {<br />public int doEndTag() throws JspException {<br />StringBuffer buffer = showTree();<br />try {<br />pageContext.getOut().println(buffer.toString());<br />} catch (IOException ioe) {<br />ioe.printStackTrace();<br />}<br />return super.doEndTag();<br />}</p><p>private StringBuffer showTree() {<br />StringBuffer sb = new StringBuffer();<br />sb.append("<div class=/"tree/">/n");<br />sb.append("<mce:script type=/"text/javascript/"><!--<br />/n");<br />sb.append("<!--/n");<br />sb.append("document.write(dTree);/n");<br />sb.append("//-->/n");<br />sb.append("<br />// --></mce:script>/n");<br />sb.append("</div>/n");<br />return sb;<br />}<br />}<br />

 

在WEB-INF/taglib/建立my-taglib.xml檔案:

<?xml version="1.0" encoding="ISO-8859-1" ?><br /><!DOCTYPE taglib<br /> PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"<br /> "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"><br /><taglib><br /> <tlib-version>1.0</tlib-version><br /> <jsp-version>1.2</jsp-version><br /> <short-name>tree</short-name><br /> <!--initTreeTag--><br /> <tag><br /> <name>init</name><br /> <tag-class>cl.mytree.InitTreeTag</tag-class><br /> <body-content>empty</body-content><br /> </tag><br /> <!--ShowTreeTag--><br /> <tag><br /> <name>show</name><br /> <tag-class>cl.mytree.ShowTreeTag</tag-class><br /> <body-content>empty</body-content><br /> </tag><br /></taglib>

 

在web.xml中添加:

<taglib><br /><taglib-uri>/WEB-INF/lib/my-taglib.tld</taglib-uri><br /><taglib-location>/WEB-INF/taglib/my-taglib.tld</taglib-location><br /></taglib>

 

建立mytree.jsp頁面:

 <%@ page language="java" contentType="text/html; charset=gbk"%><br /><%@ taglib uri="/WEB-INF/lib/my-taglib.tld" prefix="tree"%></p><p><html><br /><head><br /><title>Tree example</title><br /><meta http-equiv="Content-Type" content="text/html; charset=GBK"><br /><link rel="StyleSheet" href="dtree.css" type="text/css"><br /><script type="text/javascript" src="dtree.js"></script><br /><tree:init /><br /></head><br /><body></p><p><b>Tree example :</b><br /><br /><br /><br /><br /><tree:show /><br /><br /><br /><br /><br /></body><br /></html>

 

運行頁面即可看到效果,不過只是很簡單的效果。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.