请问:现在已经有了一个树形结构的对象,我希望直接在java中写出一个HTML页面,页面上显示相应的树形结构结构。
这样的递归方法要怎么写啊,画竖线,横线可以插图片,关键是怎么让它能正确显示啊!
类似如下结构:root
|__node1
|  |__node2
|__node3谢谢高手帮忙!

解决方案 »

  1.   

    我刚学java写的第一个程序就是这个,代码实在不能看,太烂了,当时做的是taglib来显示,
    下面是片段    /**
         * 获取一个树节点的html代码
         * @param node 需要显示的节点
         * @param out JspWirter,用来输出
         * @throws java.io.IOException 抛出IO异常
         */
        private void printTreeNodeHtml(JspWriter out, TreeNode node)
            throws IOException
        {
    //      node.getType()返回int,需要转换成Integer,再转换成相应的英文名
            Integer nodetype = new Integer(node.getType());
    //      获取节点类型的英文名
            TreeNodeTagModel tagNodeModel = (TreeNodeTagModel) nodeMap.get(
                nodetype);
    //      树节点的标识,id用来区分同一页面的不同树,serial用以区分同一树终的不同节点
            String nodeid = id + node.getSerial();
    //      图片的ID,用前缀加上节点id
            String imgid = "img" + nodeid;
    //      不同类型的节点有不同的图,即icon,默认为null.gif
            String image_type = image_path + "null.gif";
    //      节点可能需要带一个Href,而href上参数可能各不相同,用map来保存当前需要带的参数信息
    //      用paramMap初始化,传入所有链接节点都带的参数
            Map nodeParamMap = new HashMap(paramMap);//      如果在jsp中类型有自己的一些参数,则采用它自己的参数,否则用默认的
            if (tagNodeModel != null)
            {
                if (tagNodeModel.getImage() != null)
                {
    //                 图片
                    image_type = image_path + tagNodeModel.getImage();
                }
                if (tagNodeModel.getParamName() != null)
                {
    //             节点自己的paramName
                    nodeParamMap.put(tagNodeModel.getParamName(), node.getId() + "");
                }
                if (tagNodeModel.getParentParamName() != null && node.hasParent())
                {
    //             如果需要传父亲节点,如attribute和attributeset
                    nodeParamMap.put(tagNodeModel.getParentParamName(),
                                     node.getParent().getId() + "");
                }
            }//      Table开始
            boolean display = false;
            if (expand )
            {
                display = true;        }
            printTableOpenHtml(out, nodeid, display, node.hasChild());
    //      一行开始,这里一个节点用一个table显示,每个table只有一行
            printRowOpenHtml(out);
    //      显示节点之前的空白以打到缩进的目的,形成一棵树的视图        // 美化,缩进12px
            printEmptyTD(out);        printBlankHtml(out, node);
    //      显示节点控制的图片,比如打开关闭等等。位于节点icon之前,一共有五种可能
            printImageHtml(out, node, imgid, expand);
    //      显示节点图标
            printIconHtml(out, image_type);
    //      如果有checkbox或者radio,显示        printSelectHtml(out, tagNodeModel, node);//      显示节点名称,可能包含链接
            printLabelHtml(out, tagNodeModel, node, nodeParamMap, nodeid);
    //      行结束
            printRowCloseHtml(out);
    //      Table结束
            printTableCloseHtml(out);//      释放临时变量Map
            nodeParamMap.clear();
            nodeParamMap = null;//      递归执行当前节点的子孙节点
            if (node.hasChild())
            {
                out.println("<table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" id='TBC"+nodeid+"' style=\"display:"+(display?"block":"none")+"\"><tr><td>");
                List list = node.getChilds();
                for (int i = 0; i < list.size(); i++)
                {
                    TreeNode tmp = (TreeNode) list.get(i);
                    printTreeNodeHtml(out, tmp);
                }
                out.println("</td></tr></table>");
            }
        }
      

  2.   

    谢谢回复,但是我现在不是用jsp页面,所以不能用标签,只好直接写出HTML页面,不知道能不能给点完整的代码参考啊。
      

  3.   

    一样的啊,tag就是封装了你的out流而已....
    完整的代码肯定没有啊
    你是什么页面?
    我好像还用xml+xslt做过
      

  4.   

    我是用velocity先取得一个页面模板,再生成页面的,主要我现在对递归生成页面不太清楚,还有就是从数据库递归取得数据后怎么再转换 成画面显示可用的数据结构。
      

  5.   

    我当时的做法,每个节点是一个2×1的表格,其子节点都装入这个cell(当点击展开/闭合的图标时,只需要将下层的这个cell隐藏即可)我想你的难点是
    (1)缩进多少位置
    (2)显示什么图标一个节点前面可能有空白,竖线(下层展开),以及当前节点前面的线条。
    (1)由上至下遍历当前节点的祖先节点。如果这个节点有后续兄弟(nextSibling)节点,则画竖线。否则画空白。这样就得到了缩进,以及缩进位置的显示。
    (2)当前节点前的线:无非两种,一种是有后续节点的 |-  ,或者没有后续节点的|__你把这个过程想清楚,就不难写了
      

  6.   

    最简单的方法就是找一个javascript或者别的语言实现好的树,
    按照它的要求改造一下你的数据结构。
      

  7.   

    美河的ajax实战1就是讲的树型结构,你可以下来看看,在xunlei.com里搜下就有了
      

  8.   

    我想问一下,用html能做出来吗?