Tree的問題,急!!!高分求解!!!


<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" %>
<html>
<head>
<title>目錄樹加載程序</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>

<body>
<%
String rschildNum=null;
String rsid=null;
String rsparentid=null;
String rstext=null;
String rsexeCategory=null;
String rsexeArgv=null;
String rsicon=null;
String icon=null;

Connection con=null;
Statement stmt=null;
ResultSet rs=null;

String parentid=request.getParameter("id");
System.out.println("parentid====>"+parentid.substring(1,parentid.length()-1));
parentid=parentid.substring(1,parentid.length()-1);
 try{
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    }
    catch(Exception e){
      System.out.println("JDBC-ODBC driver failed to load");
    }


try{
String server_path=application.getRealPath("/");
System.out.println(server_path);
String strurl="jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ="+server_path+"tree.mdb";
System.out.println(strurl);

 con=DriverManager.getConnection(strurl);
 stmt=con.createStatement();

System.out.println("connect OK");
String sqlstr="select * ,(select count(*) from tree where parentid=subTree.id) as childNum from tree subTree where parentid="+parentid;
System.out.println("sql="+sqlstr);
rs=stmt.executeQuery(sqlstr);


out.println("<script >");

out.println("var tree=self.parent.tree;");
//加載第一級節點時,應設id為-1
if("-1".equals(parentid))
  out.println("var toNode=tree.root;");
else
  //節點的鍵值已依次設成n1,n2,n3........
out.println("var toNode=tree.nodes['n" + parentid + "'];");




while (rs.next()){

//如果icon字段不為空,圖標取數據庫的值,否則根據是否有子節點取"folder"或"file"。相應地imagelist應提供這兩個鍵值的圖標


rschildNum=rs.getString("childNum");
rsid=rs.getString("id");
rsparentid=rs.getString("parentid");
rstext=rs.getString("text");
rsexeCategory=rs.getString("exeCategory");
rsexeArgv=rs.getString("exeArgv");
rsicon=rs.getString("icon");

      if(rsicon!=null){
icon=rsicon;
}
else if(rschildNum.equals("0") ){
icon="file";
}
else
        {
icon="folder";
        }
System.out.println("icon var="+icon);



        //輸出添加節點的代碼,第三個參數是設鍵值的
out.println("var nNode=tree.add(toNode,'last','" + rstext + "','" + "n" + rsid + "','" + icon + "','" + rsexeCategory + "','" + rsexeArgv + "');");
out.println("if(nNode.parent.first.label.innerText=='loading...')nNode.parent.first.remove();");
if(!rschildNum.equals("0"))
out.println("nNode.add('loading...');nNode.expand(false);");

}
out.println("</script>");
}

    catch(Exception e){
      System.out.println(e);
    }
%>
<p align="center">copywrite by 賴國欣 2003/7 All right reserved</p>
<p align="center">Email: <a href="mailto:a@lai.com.cn">a@lai.com.cn</a> website:
<a href="http://www.9499.net">http://www.9499.net</a></p>
</body>
</html>


上面的JSP放入TOMCAT中運行后,在
out.println("var tree=self.parent.tree;");
out.println("var toNode=tree.root;");
out.println("var toNode=tree.nodes['n" + parentid + "'];");
這三句話時出現:"tree.root對象不存在或為空","tree.nodes對象不存在或為空"
經排查,問題出現在out.println("var tree=self.parent.tree;");這句話,但小弟不知道這個tree變量應如何賦值,self.parent后沒有tree屬性,請各位大哥幫助解決一下,小弟在此先謝了!!!

19 个解决方案

#1


你這是參考別人的程序吧,再把相關的內容前前后后看一看。
我不懂tree.幫你頂。
self是什么:document?
self.parent是什么:windows?
感覺有問題。

建議你到js版,針對var tree=self.parent.tree;"問一下。

#2


轉帖

看很多人要求目錄樹,我的代碼可以滿足大多數要求,UP有分
http://community.csdn.net/Expert/topic/3190/3190905.xml?temp=.8794672

#3


我察看了阿賴的程序。
樓主沒有引入阿萊的js文件,仔細看一下阿萊的示例,應該能高頂的。

#4


把self換成this誓師

#5


我試過了,this也不行,大蝦們幫忙啊!!!

#6


幫頂混分

#7


看樓主的意思,主要是在得不到tree這個變量,那么把parent換成parent實施。如果不行,明天又控了,我來實施。

#8


靠,換成epener

#9


我新發了一個貼子,解決再jsp中應用parent中的變量的問題。
如樓主所言,引用確實有問題。
我把self.parent.tree換成window.tree可以得到。
樓主試試刊。
肯定是我黨引用的方式有問題。
期盼高人。

#10


請問 haofengfu(風斧) 用window.tree時在JSP中是否要引用什么特定的包,我在上面的JSP代碼中更改過來后,在WINDOW打"."后未出現TREE的屬性,請問該如何去解決,謝謝!

#11


window.parent.tree。

即使沒有提示也沒有關系,因為這些東西是要到前台解釋的,不是jsp的語法,是javascript的語法。
順便問一下,你用什么開發工具?我用jcreator.jb太慢。

#12


我將上面JSP中的out.println("var tree=self.parent.tree;");這句話,換成out.println("var tree=window.parent.tree;");后還是無法生成,沒用什么工具,只是編輯后,將所有資源放入TOMCAT中運行,在IE瀏覽運行時,顯示不出樹,且有腳本錯誤跟上面我提的一樣

#13


建議樓主先從靜態的試驗一下,比如src先不用jsp文件,暫時硬寫進區,用了jsp文件后,暫時不從數據庫里讀,還是硬寫,這樣一步步隔離問題,得到故障出再那里。
我實現了jsp文件從父窗口讀取變量這樣第一步工作(為此我發了一個貼子)。我對這方面的問題也不熟悉,這兩天又頻繁喝酒,狀態狠差。
高手怎么不理會這個貼子,我們是頻繁的頂阿,無效。

強烈建議樓主從最基本的開始調試。問題不一定出在jsp那里,我們要先學會html方式下如何設定iframe.

以下是我試驗讀父窗口的代碼(抬舉他了,算不上什么代碼)。
html文件:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<script>
var aaa   ;
aaa="hehe";
</script>
</head>
<body>
  <iframe id="ifrLoad" src="tree_load.jsp "  nowrap="true"></iframe>
</body>
</html>
jsp文件:
tree_load.jsp:
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<%

try
{
out.println("<script  >");

  out.println("  if ( window.parent != null )");
  out.println("  {");
  out.println("      document.writeln('this window has a parent window');");
  out.println("      if ( window.parent.aaa != null )");
  out.println("      {");
  out.println("          document.writeln('parent window object aaa = ' + window.parent.aaa);");
  out.println("          document.writeln('<br>');");
  out.println("      }");
  out.println("      else ");
  out.println("      {");
  out.println("       alert('找不到變量,可奈何!!!');");
  out.println("      }");
  out.println("  }");
out.println("</script>");
}
catch(Exception e)
{
System.out.println(e);
}
%>

</body>
</html>


#14


建議樓主先從靜態的試驗一下,比如src先不用jsp文件,暫時硬寫進區,用了jsp文件后,暫時不從數據庫里讀,還是硬寫,這樣一步步隔離問題,得到故障出再那里。
我實現了jsp文件從父窗口讀取變量這樣第一步工作(為此我發了一個貼子)。我對這方面的問題也不熟悉,這兩天又頻繁喝酒,狀態狠差。
高手怎么不理會這個貼子,我們是頻繁的頂阿,無效。

強烈建議樓主從最基本的開始調試。問題不一定出在jsp那里,我們要先學會html方式下如何設定iframe.

以下是我試驗讀父窗口的代碼(抬舉他了,算不上什么代碼)。
html文件:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<script>
var aaa   ;//這個變量將要被jsp文件寫到iframe中去。
aaa="hehe";
</script>
</head>
<body>
  <iframe id="ifrLoad" src="tree_load.jsp "  nowrap="true"></iframe>
</body>
</html>
jsp文件:
tree_load.jsp:
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<%

try
{
out.println("<script  >");

  out.println("  if ( window.parent != null )");
  out.println("  {");
  out.println("      document.writeln('this window has a parent window');");
  out.println("      if ( window.parent.aaa != null )");
  out.println("      {");
  out.println("          document.writeln('parent window object aaa = ' + window.parent.aaa);");
  out.println("          document.writeln('<br>');");
  out.println("      }");
  out.println("      else ");
  out.println("      {");
  out.println("       alert('找不到變量,可奈何!!!');");
  out.println("      }");
  out.println("  }");
out.println("</script>");
}
catch(Exception e)
{
System.out.println(e);
}
%>

</body>
</html>


#15


如果樓主實現了靜態添加樹的功能,請貼出來。我要學習。

#16



<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<%@ page import="java.io.*"%>
<%@ page import="org.w3c.dom.*"%>
<%@ page import="javax.xml.parsers.*"%>
<%@ page import="java.util.*"%>
<!--
Statement stmt = null;
ResultSet rs = null;
Connection conn = null;
try
{
String url="jdbc:odbc:book";
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conn = DriverManager.getConnection(url);
rs = stmt.executeQuery("select logname from member");
System.out.println("1111111111");
}
catch(SQLException sqle)
{
sqle.printStackTrace();
}
catch(ClassNotFoundException e)
{
e.printStackTrace();
}

-->

<SCRIPT language='JavaScript'> 
        function chkform1(){  
            var txid = document.tree.Trans.value;
            targetT(txid);
        }


        function chkform(btn){  
            document.tree.action = "transaction";
            document.tree.Trans.value = btn ;
            document.tree.submit();   
        }
function targetT(txid)
{
        var txidcode = "T"+txid;
if(parent.main.document.DATAIN.MENU==null){
alert("叫祅╰參!!!");
return;
}
parent.main.document.DATAIN.MENU.value=txidcode;
var s = parent.main.document.DATAIN.action;
parent.main.document.DATAIN.action=s+"Menu";
//parent.TXAREA.document.DATAIN.action="/NetBranch/GCSIcpMenu";
parent.main.document.DATAIN.submit();
        parent.mainfrm.document.transinfo.submit();


</SCRIPT>
<html>
<style>
a:visited
{
text-decoration: none;
color: #000000;
cursor:default;
}
a:hover
{
text-decoration: none;
color: blue;
cursor:default;
}
a:link
{
text-decoration: none;
color: #000000;
cursor:default;
}
</style>
<head>
<title>JSP Page</title></head>
<body>
<script language="javascript" src="twins.js"></script>
<form action="transaction"  name='tree'target='main'>
<!--<script language="JavaScript" src="javascript/tree_radio.js"></script>-->
<script language="JavaScript" src="tree.js"></script>
<script language="JavaScript">
<%
File file=new File("d:/jbproject/eSubject/eSubject/dept.xml");
try
{
if(!file.exists())
{
file.createNewFile();
}
}
    catch(Exception e)
{
   e.printStackTrace();
    }
String DEPTID=null;
String DEPTNAME=null;
String ROLEID=null;
String ROLENAME=null;
String PERSONID=null;
String PERSONNAME=null;
//String ID=null;
//String name=null;
//String desc=null;
//String strID=null;
//String subjectName=null;
//String subjectID=null;
//String gradeID = null;
//String rubricID = null;
String totalName=null;
ArrayList ay=new ArrayList();
NodeList nl,nlist,list,li,dept;
int i,j,k,m;

DocumentBuilderFactory fact=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=fact.newDocumentBuilder();
Document doc=builder.parse(file);
   dept=doc.getElementsByTagName("TOTALNAME");
   for(int l=0;l<dept.getLength();l++)
   {
       Element deptNode=(Element)dept.item(l);
       totalName=deptNode.getAttribute("TOTALNAME");
   }
    %>
function documentContextMenu()
{
return true;
}
  document.oncontextmenu = documentContextMenu;
  foldersTree = gFld("<%=totalName%>","");
<%
  

nlist=doc.getElementsByTagName("DEPARTMENT");

for(i=0;i<nlist.getLength();i++)
{
Element node=(Element)nlist.item(i);
    DEPTID=node.getAttribute("DEPTID");
DEPTNAME=node.getAttribute("DEPTNAME");
nl=node.getElementsByTagName("ROLE");
if(nl.getLength()>0)
{
%>
aaa<%=i%>= insFld(foldersTree, gFld("<%=DEPTNAME%>"));
<%
}
else
{
%>
//insDoc(foldersTree, gLnk(0, "<%=DEPTNAME%>","qq.jsp?<%=DEPTNAME%>"));
insDoc(foldersTree,gFld("<%=DEPTNAME%>"));
<%
}


    for(j=0;j<nl.getLength();j++)
    {
Element no=(Element)nl.item(j);
ROLEID=no.getAttribute("ROLEID");
    ROLENAME=no.getAttribute("ROLENAME");
    list=no.getElementsByTagName("PERSON");
if(list.getLength()>0)
    {
%>
aaa<%=i%><%=j%> = insFld(aaa<%=i%>, gFld("<%=ROLENAME%>"));
<%
}
else
{
%>
insDoc(aaa<%=i%>, gLnk(0, "<%=ROLENAME%>","qq.jsp?<%=ROLENAME%>"));
<%
}
for(k=0;k<list.getLength();k++)
{
Element yes=(Element)list.item(k);
    PERSONID=yes.getAttribute("PERSONID");
PERSONNAME=yes.getAttribute("PERSONNAME");
li=yes.getElementsByTagName("grade");
if(li.getLength()>0)
{
%>
aaa<%=i%><%=j%><%=k%> = insFld(aaa<%=i%><%=j%>, gFld("<%=PERSONNAME%>"));
<%
}
else
{
%>
insDoc(aaa<%=i%><%=j%>, gLnk(0, "<%=PERSONNAME%>","qq.jsp?<%=PERSONNAME%>"));
<%
}
/*for(m=0;m<li.getLength();m++)
{
Element now=(Element)li.item(m);
gradeID=now.getAttribute("id");
rubric=now.getElementsByTagName("rubric");
if(rubric.getLength()>0)
{
%>
aaa<%=i%><%=j%><%=k%><%=m%> = insFld(aaa<%=i%><%=j%><%=k%>, gFld("<%=gradeID%>"));
<%
}
else
{
%>
insDoc(aaa<%=i%><%=j%><%=k%>, gLnk(0, "<%=gradeID%>","qq.jsp?<%=gradeID%>"));
<%
}
for(int l=0;l<rubric.getLength();l++)
{
Element know=(Element)rubric.item(l);
rubricID = know.getFirstChild().getNodeValue();
%>
insDoc(aaa<%=i%><%=j%><%=k%><%=m%>, gLnk(0, "<%=rubricID%>","qq.jsp?<%=rubricID%>"));
<%
}
}*/
}
}    
}

 
%>


initializeDocument();
</script>
</form>
</body>
</html>

#17


上面是關於讀取XML文件生成樹的代碼.下面將數據庫中的數據按一定的格式生成XML文件,一旦XML文件生成后,即可用上面的JSP讀取XML生成樹

#18


package xmlBean;
import java.sql.*;
import javax.xml.parsers.*;
import org.apache.xpath.*;
import org.apache.crimson.tree.*;
import javax.xml.transform.dom.*;
import org.w3c.dom.*;
import java.util.*;
import javax.xml.transform.stream.*;
import javax.xml.transform.*;
import java.io.*;
import java.util.*;


public class BuildDeptXML
{
Connection conn=null;
String sql;
int i=0;
ArrayList list=new ArrayList();
File f=new File("dept.xml");
Element totalname=null;
Element department=null;
    Element role=null;
Element person=null;
Element know=null;
String deptID="";
String roleID="";
boolean bool=false;
boolean bool1=false;
boolean bool2=false;
public void BuildXml()
{

try
{
if(!f.exists())
{
f.createNewFile();
}
    DocumentBuilderFactory fact=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=fact.newDocumentBuilder();
Document doc=builder.newDocument();


    conn=DBConnection.getConnection();
sql="select * from dept";
Statement stm=conn.createStatement();
    ResultSet rs=stm.executeQuery(sql);
    totalname=doc.createElement("TOTALNAME");
    totalname.setAttribute("TOTALNAME","小強");
while(rs.next())
{
deptID=rs.getString(1);
department=doc.createElement("DEPARTMENT");
totalname.appendChild(department);
department.setAttribute("DEPTID",rs.getString(1));
department.setAttribute("DEPTNAME",rs.getString(3));

// sql="select * from teacher where deptid='"+rs.getString(1)+"'";
// conn=DBConnection.getConnection();
// stm=conn.createStatement();
// ResultSet result=stm.executeQuery(sql);
//
// while(result.next())
// {
    sql="select * from role";//where roleid='"+result.getString(3)+"'";
    conn=DBConnection.getConnection();
    stm=conn.createStatement();
    ResultSet rule=stm.executeQuery(sql);
 while(rule.next())
    {
          sql="select * from teacher where roleid='"+rule.getString(1)+"'and deptid='"+deptID+"'";
          conn=DBConnection.getConnection();
             stm=conn.createStatement();
             ResultSet teach=stm.executeQuery(sql);
             if(teach.next())
             {
          
          role=doc.createElement("ROLE");
          department.appendChild(role);
          role.setAttribute("ROLEID",rule.getString(1));
          role.setAttribute("ROLENAME",rule.getString(2));
          sql="select * from teacher where roleid='"+rule.getString(1)+"'and deptid='"+deptID+"'";
             conn=DBConnection.getConnection();
             stm=conn.createStatement();
             ResultSet teacher=stm.executeQuery(sql);
             while(teacher.next())
             {
              person=doc.createElement("PERSON");
              role.appendChild(person);
                person.setAttribute("PERSONID",teacher.getString(1));
                person.setAttribute("PERSONNAME",teacher.getString(4));
             }
           }
          
    }
}
doc.appendChild(totalname);
// TransformerFactory tf=TransformerFactory.newInstance();
//     Transformer tranformer=tf.newTransformer();
//     DOMSource source=new DOMSource(doc);
//
//         Properties properties = tranformer.getOutputProperties(); 
//         properties.setProperty(OutputKeys.ENCODING,"GB2312");
//
//         tranformer.setOutputProperties(properties);
//         StreamResult re=new StreamResult(new FileOutputStream(f));
//         tranformer.transform(source,re);
            ((XmlDocument)doc).write(new FileOutputStream(f));
    }
    catch(Exception e)
    {
     e.printStackTrace();
    }
 }

#19


<--------------高手看過來! 能不能搞定這個?
http://community.csdn.net/Expert/topic/3472/3472337.xml?temp=.1701624

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com