原理:查到返回的都是字符串,用递归的方法去读取.
开发的步骤:
第一步:先把分销商的信息先全部以字符串的方式输出来即可,不用去管其他的层次感.
第二步:加入层次感,比较像树了.看你递归调了几次了,传入的level即可控制.
第三步:加入加减号,如果是叶子节点前面就加入减号,非叶子节点前面就加入一个加号.
div树:控制三个img1,im1,下面的那个div,控制这三个的事件即可.
第四步:采用div生成树形结构.每个节点之前都有个div,每一个都有div的结束
// //第一步:先把分销商信息从数据库里读出来,把它先显示出来,而不加任何层次的东西
// private void readClientTree(Connection conn,int id,int level)throws SQLException{
// String sql="select * from t_client where pid=?";
// PreparedStatement pstmt=null;
// ResultSet rs=null;
// try{
// pstmt=conn.prepareStatement(sql);
// pstmt.setInt(1, id);
// rs=pstmt.executeQuery();
// while(rs.next()){
// //String clientName=rs.getString("name");
// sbHtml.append(rs.getString("name"));
// if("N".equals(rs.getString("is_leaf"))){
// readClientTree(conn,rs.getInt("id"),level);
// }
// }
// }finally{
// DbUtil.close(rs);
// DbUtil.close(pstmt);
// }
// }
// //第二步:加入层次感,比较像树了.看你递归调了几次了,传入的level即可控制.
// private void readClientTree(Connection conn,int id,int level)throws SQLException{
// String sql="select * from t_client where pid=?";
// PreparedStatement pstmt=null;
// ResultSet rs=null;
// try{
// pstmt=conn.prepareStatement(sql);
// pstmt.setInt(1, id);
// rs=pstmt.executeQuery();
// while(rs.next()){
// //String clientName=rs.getString("name");
// for(int i=0;i<level;i++){
// sbHtml.append(" ");
// }
// sbHtml.append(rs.getString("name")).append("<br/>");
// if("N".equals(rs.getString("is_leaf"))){
// readClientTree(conn,rs.getInt("id"),level+1);
// }
// }
// }finally{
// DbUtil.close(rs);
// DbUtil.close(pstmt);
// }
// }
// //第三步:加入加减号,如果是叶子节点前面就加入减号,非叶子节点前面就加入一个加号.
// private void readClientTree(Connection conn,int id,int level)throws SQLException{
// String sql="select * from t_client where pid=?";
// PreparedStatement pstmt=null;
// ResultSet rs=null;
// try{
// pstmt=conn.prepareStatement(sql);
// pstmt.setInt(1, id);
// rs=pstmt.executeQuery();
// while(rs.next()){
// //String clientName=rs.getString("name");
// for(int i=0;i<level;i++){
// sbHtml.append(" ");
// }
// if("N".equals(rs.getString("is_leaf"))){
// sbHtml.append("-").append(rs.getString("name")).append("<br/>");
// readClientTree(conn,rs.getInt("id"),level+1);
// }else{
// sbHtml.append("+").append(rs.getString("name")).append("<br/>");
// }
// }
// }finally{
// DbUtil.close(rs);
// DbUtil.close(pstmt);
// }
// }
//第四步:采用div生成树形结构.每个节点之前都有个div,每一个都有div的结束.
private void readClientTree(Connection conn,int id,int level)throws SQLException{
String sql="select * from t_client where pid=?";
PreparedStatement pstmt=null;
ResultSet rs=null;
try{
pstmt=conn.prepareStatement(sql);
pstmt.setInt(1, id);
rs=pstmt.executeQuery();
while(rs.next()){
//String clientName=rs.getString("name");
sbHtml.append("<div>");
for(int i=0;i<level;i++){
sbHtml.append("<img src=/"../images/white.gif/">/n");
}
if("N".equals(rs.getString("is_leaf"))){
sbHtml.append("<img alt=/"展开/" style=/"cursor:hand;/" onClick=/"display('"+rs.getInt("id")+"');/"/n")
.append("id=/"img"+rs.getInt("id")+"/" src=/"../images/plus.gif/">/n")
.append("<img id=/"im"+rs.getInt("id")+"/" src=/"../images/closedfold.gif/">/n")
.append("<a href=/"client_node_crud.jsp?id="+rs.getInt("id")+"/" target=/"clientDispAreaFrame/">"+rs.getString("name")+"</a>/n")
.append("<div style=/"display:none;/" id=/"div"+rs.getInt("id")+"/">/n");
//sbHtml.append("-").append(rs.getString("name")).append("<br/>");
readClientTree(conn,rs.getInt("id"),level+1);
sbHtml.append("</div>/n");
}else{
sbHtml.append("<img src=/"../images/minus.gif/">/n")
.append("<img src=/"../images/openfold.gif/">/n");
if(Constants.YES.equals(rs.getString("is_client"))){
sbHtml.append("<a href=/"client_crud.jsp?id="+rs.getInt("id")+"/" target=/"clientDispAreaFrame/">"+rs.getString("name")+"</a>/n");
}else{
sbHtml.append("<a href=/"client_node_crud.jsp?id="+rs.getInt("id")+"/" target=/"clientDispAreaFrame/">"+rs.getString("name")+"</a>/n");
}
//sbHtml.append("+").append(rs.getString("name")).append("<br/>");
}
sbHtml.append("</div>/n");
}
}finally{
DbUtil.close(rs);
DbUtil.close(pstmt);
}
}
div树原理图: