jsp树形菜单节点排序问题 我用的是梅花雪树形控件,实现了一个树形菜单。。现在要做的功能是,选择同级节点后,进入到一个新的页面,可以对其上下排序。。然后再显示树形菜单的时候按照刚才页面上排序的顺序来进行显示。也就是说,我要实现树形菜单的排序功能。。请大虾们帮忙,不太会做! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1。原理简介 dtree是一个免费的javascript脚本,只需定义有限的几个参数,就可以做出漂亮的树型菜单。下载目录:http://www.destroydrop.com/javascripts/tree/ 以下是dtree的用法示例: 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>本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zqhf8/archive/2007/07/09/1683938.aspx 呵呵 你不知道需求了嘛 表中应该会有 sort 排序编号 。如果没有就需要你在缓存中操作了感觉不是很难吧 jbpm4.4里面当前流程的历史信息怎么取? jsp 初学关于spring/web/mvc帮个忙。概念性简单问题,没人用springwebmvc吗 Jsp框架问题 在Action里如何接收到表单中所有的值(值是通过ForEach 迭代出来的) 请教:一个关于jsp(用的是struts)获取参数的问题(这个有点特殊,望高手指教)!!! [求助]查询数据库时碰到一个诡异的错 请教为什么? 改变一系列页面的页面风格问题 flex遍历Map集合 未知Key 求生成唯一ID号的一个算法! 网站打开网页卡住,求教!!!
dtree是一个免费的javascript脚本,只需定义有限的几个参数,就可以做出漂亮的树型菜单。下载目录:http://www.destroydrop.com/javascripts/tree/
以下是dtree的用法示例:
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>
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zqhf8/archive/2007/07/09/1683938.aspx