请问:现在已经有了一个树形结构的对象,我希望直接在java中写出一个HTML页面,页面上显示相应的树形结构结构。
这样的递归方法要怎么写啊,画竖线,横线可以插图片,关键是怎么让它能正确显示啊!
类似如下结构:root
|__node1
| |__node2
|__node3谢谢高手帮忙!
这样的递归方法要怎么写啊,画竖线,横线可以插图片,关键是怎么让它能正确显示啊!
类似如下结构:root
|__node1
| |__node2
|__node3谢谢高手帮忙!
下面是片段 /**
* 获取一个树节点的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>");
}
}
完整的代码肯定没有啊
你是什么页面?
我好像还用xml+xslt做过
(1)缩进多少位置
(2)显示什么图标一个节点前面可能有空白,竖线(下层展开),以及当前节点前面的线条。
(1)由上至下遍历当前节点的祖先节点。如果这个节点有后续兄弟(nextSibling)节点,则画竖线。否则画空白。这样就得到了缩进,以及缩进位置的显示。
(2)当前节点前的线:无非两种,一种是有后续节点的 |- ,或者没有后续节点的|__你把这个过程想清楚,就不难写了
按照它的要求改造一下你的数据结构。