200分请教

patriot_cool 2002-12-09 03:52:11
请问象csdn论坛这样的树状结构,点击自动加载下一级的内容,是怎么做的!请有经验的高手指点!
...全文
64 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
july_typhoon 2002-12-23
  • 打赏
  • 举报
回复
我看了csdn上的js代码,通过你的指点,我基本明白了做法。但还有几个问题:
首先,httpob.Open("POST","/rlzyservlet/rlzy.servlet.XmlSqlServlet?nodeId="+鼠标点击节点的id,false)中的参数,第一个是servlet中的方法名吗?第二个是class文件名,还是.shtml文件名,或者就是如/servlet1这种。
然后,你给我的程序中得到xml文件的方法是service(),它把xml输入到管道中去,让js中的object自己拿吗?
最后,var V_xmlDom=httpob.responseXML,怎么取到XML文件,是V_xmlDom.value还是别的。先给你100分,进来拿吧!谢谢


"rlzyservlet"是我们在IAS上配的servlet路径,你可以根据自己服务器具体去配置servlet的使用."rlzy.servlet.XmlSqlServlet"是请求的servlet,
nodeId="+鼠标点击节点的id 是传送给XmlSqlServlet的节点参数.在servlet里,接受nodeId参数,并根据此参数查询该节点的子节点,将这些子节点的信息组成xml形式的字符串,然后直接用out(ServletOutputStream)写回客户端就是了.到客户端后,xml形式的字符串就以xml dom的形式封装到V_xmlDom里面了.最后用DHTML技术操作V_xmlDom,把子节点信息用html代码树形结构就成了
maplewind 2002-12-20
  • 打赏
  • 举报
回复
你的题目是200分求教
你的问题给的点数是100点
是否有点太那个了
redkey 2002-12-20
  • 打赏
  • 举报
回复
up
gjdbf 2002-12-18
  • 打赏
  • 举报
回复
用DHTML Menu Builder的话不懂DHTML也能做呀,到网上下一个吧,呵
patriot_cool 2002-12-18
  • 打赏
  • 举报
回复
用DHTML吗,但是我还是不知道怎么做呀,有没有小例子!
hahacc 2002-12-17
  • 打赏
  • 举报
回复
我觉得还是数据库的设计问题,如果加一个字段作为它的字节点表示,那么每单击一个树结点,只需要查找对应的字节点就可以了。
不管多么庞大的书目录,这个字段足够设计出你需要的节点层数,csdn时使用asp+xml制作的属性菜单。
正如july_typhoon(加油的风) 所说的使用XMLHTTP对象,传送当前节点代码至后台的jsp或者servlet,(CSDN使用asp)查询该节点的所有子节点(这里可以查询对应子节点字段内容的数据),以xml dom的形式返回客户端.客户端使用DHTML技术,用一个层(或者表格等等TAG)将查询结构显示成树状结构即可.
DavidBone 2002-12-16
  • 打赏
  • 举报
回复
gz
gjdbf 2002-12-16
  • 打赏
  • 举报
回复
用DHTML Menu Builder这个软件做,爽死了,呵~~~
july_typhoon 2002-12-13
  • 打赏
  • 举报
回复
patriot_cool(),因为公司正催着我们项目签初验,所以时间较紧张.实际上,我们并没有一个你所描述的树,因为我们的树节点树并非大的不可接受.不过,总之就是一个页面的静态刷新的问题.我们系统用了很多,我把其实现思想讲了,剩下的就只有一个DHTML的问题了,如:
<script>
var V_html="ID:20021118023808<br>BMBH:01<br>BMMC:一水厂<br>SSBM:default<br>DD:null<br>FZR:null<br>LXDH:null<br>YJDZ:null<br>BMZL:null<br>ZYBZ:null<br><p></p>ID:20021118023810<br>BMBH:09<br>BMMC:营业部<br>SSBM:default<br>DD:null<br>FZR:null<br>LXDH:null<br>YJDZ:null<br>BMZL:null<br>ZYBZ:null<br><p></p>ID:20021118023811<br>BMBH:11<br>BMMC:华博公司<br>SSBM:default<br>DD:null<br>FZR:null<br>LXDH:null<br>YJDZ:null<br>BMZL:null<br>ZYBZ:null<br><p></p>";

function test(){
a.innerHTML=V_html;
}
</script>
<input type=button value=test onclick=test()>
<div id=a style="display:block;background-color:#cccccc;height:400;width:500"></div>

大概就这样子了,你自己作一下试验吧
july_typhoon 2002-12-12
  • 打赏
  • 举报
回复
V_xmlDom是一个new ActiveXObject("Microsoft.XMLDOM"),操作该对象,可以取得服务器返回的子对象集合的有关值.
有关该对象的用法,你可以去查询一下微软的msdn,这里列出一些常用的方法:
id节点集合:id = V_xmlDom.getElementsByTagName("ID");//ID
id节点集合的第no个节点:id1=id.item(no) (<ID V1="456456">1423456</ID>)
id节点集合的第no个节点的V1属性:v1=id1.getAttribute("V1")
然后用这些值,生成树形结构的html字符串ss,令层div_nodeId.innerHTML=ss;
HelloWorldd 2002-12-12
  • 打赏
  • 举报
回复
关注,思考中。。。
jndszl 2002-12-12
  • 打赏
  • 举报
回复
up
patriot_cool 2002-12-12
  • 打赏
  • 举报
回复
多谢july_typhoon(加油的风) 兄,能否给个小的示范,最简单的一个父节点,两个子节点即可;父节点已有,两个子节点写在xml中,或者就是一个buffer字段,如param1¶m2,我最关心的就是怎么动态加载子节点!
playgb 2002-12-12
  • 打赏
  • 举报
回复
import javax.swing.*;
import javax.swing.tree.*;
import java.awt.*;

public class Mytree extends JFrame
{
public Mytree()
{
Container con=getContentPane();
DefaultMutableTreeNode root=new DefaultMutableTreeNode("c:\\");
DefaultMutableTreeNode t1=new DefaultMutableTreeNode("dos");
DefaultMutableTreeNode t2=new DefaultMutableTreeNode("java");
DefaultMutableTreeNode t1_1=new DefaultMutableTreeNode("applet");
DefaultMutableTreeNode t1_2=new DefaultMutableTreeNode("jre");
root.add(t1);
root.add(t2);
t1.add(t1_1);
t1.add(t1_2);
JTree tree=new JTree(root);
JScrollPane scrollpane=new JScrollPane(tree);
con.add(scrollpane);
}
}
LiGun 2002-12-12
  • 打赏
  • 举报
回复
遍历使之一层即可
patriot_cool 2002-12-11
  • 打赏
  • 举报
回复
july_typhoon(加油的风) 兄真是想我之所想,如果有一个小例子就好了,能提供一个最简单的吗,300分相送。我对XML不是很熟悉,非常感谢!
patriot_cool 2002-12-11
  • 打赏
  • 举报
回复
谢谢!我说一说我们现在的做法:
XML是后台生成的,作为一个包传过来,用的是远程调用的方法(corba),不过这些都不要管。我现在就是如果得到了这个XML包,怎么做到动态加载,像你前面所说的,替换调隐藏的那个子节点,是怎么做到的,有简单的小例子最好了!
july_typhoon 2002-12-11
  • 打赏
  • 举报
回复
突然想起,以上方法不适合于B/S结构.因为它需要每个客户端均装有oracle客户端,并且,具有一个通用的网络服务名.
所以, patriot_cool() ,看来,还非得用xml不可.以下是我的项目组用来生成xml的一个servlet,接收的参数为查询用的sqlstr以及xml的一个基本节点的引子root.
package lr_servlet;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import lr_bean.*;

public class MakeXML extends HttpServlet {
private static final String CONTENT_TYPE = "text/xml";
private static final String CONTENT_ENCODING = "<?xml version=\"1.0\" encoding=\"gb2312\" ?>";
private OutputStreamWriter ow;
/**Initialize global variables*/
public void init(ServletConfig conf) throws ServletException {
super.init(conf);
}
public void service(HttpServletRequest req, HttpServletResponse res) throws IOException,ServletException {
String sqlstr=req.getParameter("sqlstr");
String Headstr=req.getParameter("ROOT");
ServletOutputStream out = res.getOutputStream();
ow = new OutputStreamWriter(out,"GB2312");
if (sqlstr==null){
ow.write("我没有取sqlstr中的SQL语句");
ow.flush();
return;
}
DBoperationForRs dbop=new DBoperationForRs();
Vector vdata=new Vector();
Vector vhead=new Vector();
try {
vdata=dbop.selectsql(sqlstr,vhead);
if (vdata==null||vdata.size()==0){
ow.write("生成树时我没有取到数据"+sqlstr);
ExceptionErr_log.log("生成树时我没有取到数据"+sqlstr);
ow.flush();
// return;//如果没有从数据库中取道数据,则将参数“ROOT”作为唯一节点写回客户端
}
//我开始输出XML文件
res.setContentType(CONTENT_TYPE);
ow.write(CONTENT_ENCODING);
ow.write("\n<classes>\n");
ow.write(Headstr);
for (int i=0;i<vdata.size();i++) {
Vector oneRecord=(Vector)vdata.elementAt(i);
ow.write("<class>\n");
for (int j=0;j<vhead.size();j++){
Vector oneCol=(Vector)vhead.elementAt(j);
ow.write("<!--"+(String)oneCol.elementAt(1)+"-->");
ow.write("<"+(String)oneCol.elementAt(0)+">"+(String)oneRecord.elementAt(j)+"</"+(String)oneCol.elementAt(0)+">\n");
}
ow.write("</class>\n");
}
ow.write("</classes>\n");
}
catch (Exception e) {
ow.write("生成XML文件时出现了异常错误"+e.getMessage());
ExceptionErr_log.log(e,"生成树XML文件时出现了异常错误");
//ExceptionErr_log.log(vdata.toString());
ow.flush();
}
finally {
dbop.freeConnection();
}
ow.flush();
}
/**Clean up resources*/
public void destroy() {
}
}
july_typhoon 2002-12-11
  • 打赏
  • 举报
回复
你的问题,总之就是一个页面的无闪烁刷新的问题.如果不熟悉xml,另有一解:

<script>
function test(){
var strConnString = "Provider=OraOLEDB.Oracle;Data Source=rz817;User ID=hr_system;Password=manager;PLSQLRset=1"
var conn = new ActiveXObject("ADODB.Connection");
conn.open(strConnString);
var rs = conn.execute("SELECT * FROM hr_bmxx");
var s="";
while (!rs.EOF)
{
for (var i=0; i < rs.fields.count; i++)
{
s+=rs.fields(i).name + ":" + rs.fields(i).value+"<br>";
}
s+=("<p></p>");
rs.moveNext();
}

rs.close();
conn.close();
conn = null;
a.innerHTML=s;
//alert(a.innertText);
}
</script>
<input type=button value=test onclick=test()>
<div id=a style="display:block;background-color:#cccccc;height:400;width:500"></div>
注:
此处用js连接oracle数据库的代码,我是于csdn上saucer(思归)的代码稍加改动而得到的.
当然,此法可能因无法使用连接池(是否可以?请高手指教),而速度较之稍慢一些
patriot_cool 2002-12-10
  • 打赏
  • 举报
回复
hehe,我的邮箱是wheremail@163.net,如果是我要的东东,我给你300分!现在就给好像对不起其他参与的朋友呀!好像是js+xml的技术,不是想象中那么简单的。
加载更多回复(16)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧