六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 215|回复: 0

Ajax动态加载目录树(jquery-treeview)

[复制链接]

升级  39.33%

27

主题

27

主题

27

主题

秀才

Rank: 2

积分
109
 楼主| 发表于 2013-2-8 00:01:32 | 显示全部楼层 |阅读模式
需求:
   动态加载目录树节点数据。即:树的初始状态为根节点树,当点击其中一个节点时,再从数据库中获取当前节点的子节点。
环境:
   Struts1+Hibernate3.0+jQuery+treeview
解决方案:
1.我自己的项目需求是:获取linuxFTP目录,以动态加载的方式取得该FTP上的所有目录及文件生成js树,点击文件获取该文件在FTP上的路径,目录不能点击。
2.准备工作:
 
 
<link rel="stylesheet" href="css/jquery.treeview.css" />

<link rel="stylesheet" href="css/screen.css" />

<script src="js/jquery.js" type="text/javascript"></script>

<script src="js/jquery.cookie.js" type="text/javascript"></script>

<script src="js/jquery.treeview.js" type="text/javascript"></script>

<script src="js/jquery.treeview.async.js" type="text/javascript"></script>

 
以上各引用文件可以从网上下载的treeview 包里得到,下载地址:http://jquery.bassistance.de/treeview/jquery.treeview.zip。注意js文件的引用顺序,黄色部分是异步加载必须的js文件。具体应用时根据自己情况决定,上面的文件不一定全得有。以下是我的jsp的代码:
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<%@ include file="/general/common.jsp" %>

<head>

<%

  response.setHeader("Cache-Control","no-cache");

  response.setHeader("Pragma","no-cache");

  response.setDateHeader("Expires",0);

%>

<link rel="stylesheet" href="css/jquery.treeview.css" />

 

<script src="javascript/jquery.treeview.js" type="text/javascript"></script>

<script src="javascript/jquery.treeview.async.js" type="text/javascript"></script>

<script type="text/javascript">

    $(document).ready(function(){

       $("#black").treeview({         

           url: "source.do"

       })

    });

   

function returnID(Path)

{

 if(Path!="undefined")

  document.getElementById("Path").value=Path;

  else document.getElementById("Path").value="";

}

</script>

</head>

<body>

 

<h1><bean:message key="ProgramMediacontent.SourceFileName"/></h1>

<br/>

<br/>

<br/>

<table align="center">

<tr align="left">

 

  <td width="60%" valign="top">

   <ul id="black" class="filetree treeview-famfamfam"></ul>

  </td>

 

  <td width="40%" valign="bottom" align="center">

   <div class="content_panel" id="div_function_panel">

    <center>

     <bean:message key="Content.ListFile"/><bean:message key="Colon" bundle="common"/>

      <input id="Path" style="overflow-x:visible;width:60;" type="text"></input>

      <br/>

        <div style="text-align:center "  class="buttons">

          <button type="button" onclick="return onSubmit();"><bean:message key="Button.OK" bundle="common"/> </button>

          <button type="button" onclick="return back2list();"><bean:message key="Button.Cancel" bundle="common"/></button>

        </div>

   </center>

  </div>

 </td>

 

</tr>

</table>

 

<script type="text/javascript">

function onSubmit()

{

     var Path = document.getElementById("Path").value;

     var myString = new Array();

     myString[0]=Path;

     return return2parent(btn.ok,myString); 

}

 

function back2list()

{   

   return return2parent(btn.back);

 

}

</script>

</body>

</html>
我自己的公用文件里已经有jqueryjs了,所以没有引用treeview自带的文件,jquery.cookie.js说是用来保存树的状态的,但我用后就觉得很不爽。因为我要在父页面选择一个FTP服务器,然后在上面这个dialog页面里显示其目录结构,加上jquery.cookie.js,后无论选择哪个服务器,新弹出的页面中的树总是第一次生成树的内容(这里可能表达的不是很清楚,说白了就是不刷新)。无奈去掉它,再加上jsp页面禁用缓存的经典代码,问题解决。
上面是完整的代码,为了给大家一个整体感觉,但其实生成树所用的代码只有一行:
<ul id="black" class="filetree treeview-famfamfam"></ul>
把标签与treeview连接的js如下:
 
<script type="text/javascript">

    $(document).ready(function(){

       $("#black").treeview({         

           url: "source.do"

       })

    });

</script>

看起来很简单。<ul>是要节点生成的位置,id随便取,与上面js一致就行,classtreeview自带的样式(自带了三种)。Js中的urljs树获得数据的数据源,可以是php页面、jsp页面或者是从后台action传递过来的数据。但因为treeviewJquery的插件,所以无论哪种方式,传递时都必须用json串来通讯。
Struts中配置数据源与页面关联:
 
[table][tr][td=1,1,568]
   <action

    path="/source"

    scope="request"


   type=<sp
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表