类别列表_显示树状结构

最近正在做一个有树状显示的小项目,在此将树状显示做一下小总结。

1.从数据库中取出数据并按树形结构排好序

Category中添加如下函数:

public static List<Category> getCategorys(){
  List<Category> categorys = new ArrayList<Category>();
  categorys = CategoryDAO.getCategorys(categorys, 0);
  return categorys;
 }

CategoryDAO中添加如下函数:

public static List<Category> getCategorys(List<Category> categorys, int id) {
  Connection conn = null;
  ResultSet rs = null;
   try {
   conn = DB.getConn();
   rs = DB.executeQuery(conn,  "select * from category where pid = " + id);
   while(rs.next()) {
    Category c = new Category();
    c.setId(rs.getInt("id"));
    c.setName(rs.getString("name"));
    c.setDescr(rs.getString("descr"));
    c.setPid(rs.getInt("pid"));
    c.setLeaf(rs.getInt("isleaf")==0 ? false : true);
    c.setGrade(rs.getInt("grade"));
    categorys.add(c);
    if(!c.isLeaf()) {
     getCategorys(categorys,c.getId());//将会建立好多好多的连接,因为每次conn都是重新构建的,解决方法如下。
    }
   }
  } catch (SQLException e) {
   e.printStackTrace();
  }finally{
   DB.closeResultSet(rs);
   DB.closeConn(conn);
  }
  return categorys;
 }

将此方法改为private static List<Category> getCategorys(Connection conn,List<Category> categorys, int id)

里面调用getCategorys(conn, categorys, c.getId());//这样用递归风险特别大每递归一次就会执行完getCategorys整个方法,以至于关闭与数据库的连接,只能遍历一层,并抛出异常。解决方法:将递归写成另一个方法,进行调用。在此不再详述。

再重新加入方法

public static List<Category> getCategorys(List<Category> categorys, int id) {
  Connection conn = null;
  conn = DB.getConn();
  categorys = getCategorys(conn, categorys, id);
  return categorys;
 }

以上方法在return之前调用DB.closeConn(conn); 将finally里的这一句去掉

2.树形显示

首先在jsp页面中拿到categorys

<%
List<Category> categorys = Category.getCategorys();
 %>

其次在jsp页面中引入使用到的js文件

<script language="javascript" src="script/TV20.js"></script>

然后在jsp页面的body中添加代码如下

<script language="javascript">

<!--
  addNode(-1,0,"所有类别","admin/images/top.gif");
  <%
  for(Iterator<Category> it = categorys.iterator(); it.hasNext();) {
   Category c = it.next();
  %>
   addNode(<%=c.getPid() %>, <%=c.getId() %>, "<%=c.getName() %>", "admin/images/top.gif");
  <%
  }
  %>
 showTV();
-->
</script>

转载于:https://www.cnblogs.com/happy-kate/p/3210961.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值