数据库表的设计如下:(树状结构)
id parents_id current_id name
1 0 1 电器
2 1 2 小电器
3 2 3 电灯
说明 parents_id的值为所属父类的id ,current_id为当前级别。 顶级父类的parents_id为0。
请问怎么读取出这张表,并且在jsp页面中以树形结构显示出来?问题解决一定给分,谢谢!!!
id parents_id current_id name
1 0 1 电器
2 1 2 小电器
3 2 3 电灯
说明 parents_id的值为所属父类的id ,current_id为当前级别。 顶级父类的parents_id为0。
请问怎么读取出这张表,并且在jsp页面中以树形结构显示出来?问题解决一定给分,谢谢!!!
import="java.util.*,java.sql.*"%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html> <head>
<title>类别目录树</title> <link rel="StyleSheet" href="css/dtree.css" type="text/css" />
<script type="text/javascript" src="js/dtree.js"></script>
</head>
<jsp:useBean id="con8" class="com.**.db.Sqldata"
scope="page" /> <body leftmargin="26">
<table align="center">
<tr>
<td>
<%
ResultSet rs = con8.executeQuery("select * from table");
%> <div class="dtree"> <p>
<a href="javascript: d.openAll();"> 全部展开</a> |
<a href="javascript: d.closeAll();">全部关闭</a>
</p> <script type="text/javascript">
<!--
d = new dTree('d');
d.add(0,-1,'类别');
<%
while(rs.next()){
String classId=rs.getString("current_id");
String className=rs.getString("name");
String parents_id=rs.getString("parents_id");
out.println("d.add("+classId+","+parents_id+",'"+name+"','viewByClassId.jsp?classId="+current_id+"');"); }
%>
document.write(d); //-->
</script> </div>
</td></tr></table> </body></html>
第一步:取得第一层节点;
第二步:循环递归每个父节点,得到各级节点的子节点,以下是我写的一个获取树结构的小例子,仅供参考
public void getFirstLevelNode(){
//这个你应该知道怎么写吧
}
//对每个节点进行递归取得子节点
private void genCommonTree(HttpServletRequest request, List firstLevel,
CmsUser user) {
StringBuffer tree = new StringBuffer();
if (firstLevel != null)
for (int i = 0; i < firstLevel.size(); i++) {
Channel c = (Channel) firstLevel.get(i);
genNextLevel(c,tree,true,true,true);
}
request.setAttribute("tree", tree);
}
//递归取得子节点的方法private void genNextLevel(Channel root, StringBuffer tree, boolean disable,
boolean showinput, boolean widthlink) {
ChannelManager cm = (ChannelManager) getBean("channelManager");
tree.append("<li id='" + root.getId() + "'>");
// 有子节点
if (cm.whetherCurrentNodeHaveChild(root)) {
tree.append(Child_Close_Img_begin);
tree.append(" onclick=\"showHide('" + root.getId() + "')\"");
tree.append(Child_Close_Img_end);
if (showinput) {
tree.append("<input type=\"checkbox\" name=\"ids\" ");
if (disable)
tree.append(" disabled ");
tree.append(" onClick=\"changeSelect('" + root.getId()
+ "',this)\" ");
tree.append(" value=\"" + root.getId() + "\" />");
}
if (widthlink) {
tree.append("<a href=\"#\" onclick=\"getFragments('"
+ root.getId() + "')\" >");
} else {
tree.append("<a href=\"#\">");
}
tree.append(root.getName());
tree.append("</a>");
tree.append("<ul>");
List channels = cm.getChannelChildren(root.getId());
for (int i = 0; i < channels.size(); i++) {
Channel temp = (Channel) channels.get(i);
genNextLevel(temp, tree, disable, showinput, widthlink);
}
tree.append("</ul>");
} else {
tree.append(ChildEst_Img);
if (showinput) {
tree.append("<input type=\"checkbox\" name=\"ids\" ");
if (disable)
tree.append(" disabled ");
tree.append(" onClick=\"changeSelect('" + root.getId()
+ "',this)\" ");
tree.append(" value=\"" + root.getId() + "\" />");
}
if (widthlink) {
tree.append("<a href=\"#\" onclick=\"getFragments('"
+ root.getId() + "')\" >");
} else {
tree.append("<a href=\"#\">");
}
tree.append(root.getName());
tree.append("</a>");
}
tree.append("</li>");
}