目的是要在页面中显示分类树,节点来源是从外部取来的LIST集合,集合中提供了取得节点ID,parentid等节点信息的方法。最后分类树有JS生成(这部分已经写好并测试成功)现在只需要生成一个xml格式的字符串作为参数即可,比如load("<?xml encode=\"utf-8\"?>....")
节点之间是嵌套的,如下
<menu>
   <menu></menu>
   <menu></menu>
</menu>我的思路是用递归的方法遍历集合,并将节点信息存入StringBuffer中,代码见下面,我在本地做了测试,模拟了集合的数据,结果是正确的,但是一放到应用中JSP页就变为空白,连原来的静态内容没了,google了一下,说可能还是<%%>中间的代码逻辑问题请各位达人指点一下小弟,实在是让人头大,多谢代码如下:
<%!
   //递归方法
   public StringBuffer insert(int _id , java.util.List _list , StringBuffer _XmlString)
{
   for(int j=0;j<_list.size();j++)
   {
   int id1 = ((com.thtf.common.model.MenuDTO)_list.get(j)).getJdid();
   int parentid1 = Integer.parseInt(((com.thtf.common.model.MenuDTO)_list.get(j)).getParentJdid());
   String href1 = "http://10.11.252.52:9080" + ((com.thtf.common.model.MenuDTO)_list.get(j)).getUrl();
   String name1 = ((com.thtf.common.model.MenuDTO)_list.get(j)).getJdmc();    if(_id == id1){continue;}
   if(parentid1 == _id)
{
_XmlString.append("<menu id=\"WHAT\" href=\"" + href1 +"\" text=\"" + name1 +"\"></menu>");
insert(id1,_list,_XmlString); }
   }
   return _XmlString;

 }
%>
<html>
...
            <td width="168" align="center" background="images/2_left3.gif"><table width="87%"  border="0" cellspacing="0" cellpadding="0">
<%
String NodeId = request.getParameter("id");
//out.print(NodeId);
com.thtf.common.util.ZKAdapter instance =com.thtf.common.util.ZKAdapter.getInstance();
  java.util.List list= instance.getMenuRights("trs",NodeId,true);
StringBuffer XmlString = new StringBuffer("<?xml version=\"1.0\" encoding=\"gb2312\"?><root text=\"ROOT\"  open-action=\"true\">");

  
   for(int i=0; i<list.size(); i++)
   {
int id = ((com.thtf.common.model.MenuDTO)list.get(i)).getJdid();
int parentid = Integer.parseInt(((com.thtf.common.model.MenuDTO)list.get(i)).getParentJdid());
String href = "http://10.11.252.52:9080" + ((com.thtf.common.model.MenuDTO)list.get(i)).getUrl();
String name = ((com.thtf.common.model.MenuDTO)list.get(i)).getJdmc(); if(parentid==Integer.parseInt(NodeId))
{
XmlString.append("<menu id=\"WHAT\" href=\"" + href +"\" text=\"" + name +"\"></menu>");
insert(id,list,XmlString);
}

   }    XmlString.append("</root>");
   String MyString = XmlString.toString();

%>
<script src="menu.js"></script>
<div id="menuC1"></div>
<script language="javascript">
<!--
var mm = new XMLTree("mm");
mm.load("<%=MyString%>" , document.getElementById("menuC1"));
//-->
</script>....

解决方案 »

  1.   

    zhangj0571(笨鸟飞飞) 已经告诉你了。
    ::::::insert(id1,_list,_XmlString);::::::::::::::::
    你递归调用了,而且你不断地修改_list,所以呵呵....
      

  2.   

    你在循环_list的过程中有对他进行修改了(看样子应该是添加节点了)
    你想想:
    我循环一个初始长度为6的list,在第一次循环的时候,我把这个list给又增加了一个node,然后再下一次循环的时候,list的长度是7了,虽然第二次循环是从index:1开始的,但每次循环得到的list都会比下次循环的list长度达6,你想想,这样的循环,你想什么时候能运行结束啊,之所以你的页面是空白,恐怕就是因为的昵称始终没有运行结束啊..所以建议for(int j=0;j<_list.size();j++)
    这点换成for(int j=0,len=_list.size();j<len;j++)并且你的list最好用LinkedList
      

  3.   

    回NsGFr(elan) : 多谢,可是我自始至终都没有添加LIST的操作啊
    ((com.thtf.common.model.MenuDTO)_list.get(j)).getJdid();这样的语句只是取得节点ID的方法,我在取得节点的信息后就把它加到XMLSTRING这个串里面,哪里有添加节点的操作呢?