要使用jquery.treeview.js,当然第一步是要把它下载下来,放入自己的工程中,然后在页面文件中引进 jquery.js,jquery.cookie.js,jquery.treeview.js,jquery.treeview.async.js四个 库文件,其中最后一个是要使用异步加载结点的时候,要用到的,我的项目中已经用到了这个功能,在初始化树的时候,只加载顶层的数据,当点击顶层结点的时 候,才会去加载下一层的结点,所有的数据都是通过ajax去后台取得到数据。
将库文件引入后,下一步就是要定义一个列表UL:如这样:
<ul id="ProductTypes">
</ul>
树数据将会加载到这个UL里面
<script type="text/javascript">
$(document).ready(function(){
//alert('ready');
$("#ProductTypes").treeview({
url: "/FetchProductTypeServlet"
});
//alert('ready111');
});
</script>
这里面的意思就是当文档加载完成后,向后台FetchProductTypeServlet获取数据,注意后台输出的数据必须是json格式的数据。
下一步就是后台FetchProductTypeServlet的数据输出部分了:
response.setHeader("Cache-Control", "no-cache");
response.setContentType("text/json;charset=UTF-8");
try {
request.setCharacterEncoding("utf-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
要将contenttype设置为"text/json",第一次加载初始数据的时候,会向这个FetchProductTypeServlet传递一个 get参数:root=source,所以后台可以判断root参数是否是source,如果是source,则代表是第一次加载数据,如果不是 source,则root参数传递的則是树结点的id.
数据格式如下:
[
{
"text": "1. Pre Lunch (120 min)",
"expanded": true,
"classes": "important",
"children":
[
{
"text": "1.1 The State of the Powerdome (30 min)"
},
{
"text": "1.2 The Future of jQuery (30 min)"
},
{
"text": "1.2 jQuery UI - A step to richnessy (60 min)"
}
]
},
{
"text": "2. Lunch (60 min)"
},
{
"text": "3. After Lunch (120+ min)",
"children":
[
{
"text": "3.1 jQuery Calendar Success Story (20 min)"
},
{
"text": "3.2 jQuery and Ruby Web Frameworks (20 min)"
},
{
"text": "3.3 Hey, I Can Do That! (20 min)"
},
{
"text": "3.4 Taconite and Form (20 min)"
},
{
"text": "3.5 Server-side JavaScript with jQuery and AOLserver (20 min)"
},
{
"text": "3.6 The Onion: How to add features without adding features (20 min)",
"id": "36",
"hasChildren": true
},
{
"text": "3.7 Visualizations with JavaScript and Canvas (20 min)"
},
{
"text": "3.8 ActiveDOM (20 min)"
},
{
"text": "3.8 Growing jQuery (20 min)"
}
]
}
]
格式说明:上面的1. Pre Lunch (120 min) 结点中:"expanded": true 代表这个结点下的child是展开的,children则是子结点的数据,节点3. After Lunch (120+ min)有8个子结点,其中子结点中有一个结点3.6 The Onion: How to add features without adding features (20 min),有一个id属性,同时hasChildren:true,表示其下面又有子结点,并且会向FetchProductTypeServlet传递 参数为:root=id值,具体到这里就是root=36,那么点击这个结点的时候,后台就会接收到root=36这个值,然后我们就在具体应用中,通过 数据库查询或者其它方式找到相对应的数据,然后将这些数据构造成treeview所需要的json数据,也即是上面所示格式的数据。
后台FetchProductTypeServlet代码如下:
public class FetchProductTypeServlet extends HttpServlet {
ProdTypeDao prodTypeDao = null;
@Override
public void init() throws ServletException {
// TODO Auto-generated method stub
prodTypeDao = new ProdTypeDao();
super.init();
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setHeader("Cache-Control", "no-cache");
response.setContentType("text/json;charset=UTF-8");
try {
request.setCharacterEncoding("utf-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
PrintWriter out = response.getWriter();
String root = request.getParameter("root");
System.out.println("root:"+root);
try {
String output = generateNodeString(root);
System.out.println("output======"+output);
out.print(generateNodeString(root));
} catch (ActionException e) {
e.printStackTrace();
RequestDispatcher rd = null;
request.setAttribute("ActionException", e);
rd = request.getRequestDispatcher("/common/error.jsp");
rd.forward(request, response);
}
out.flush();
out.close();
}
private String generateNodeString(String id) throws ActionException {
if(id == null){
return "";
}else if(id.equalsIgnoreCase("source")){
return generateInitTreeString();
}else{
return generateTreeChildNodeString(Integer.parseInt(id));
}
}
private String generateTreeChildNodeString(int typeId) throws ActionException{
int typeId_ = typeId ;
Connection conn = null;
//hasSubItem
StringBuilder sb = new StringBuilder();
sb.append("[");
ArrayList<ProdTypeBean> l;
try {
l = prodTypeDao.fetchSubItem(typeId_);
} catch (ActionException e) {
e.printStackTrace();
throw new ActionException("generateTreeChildNodeString err","generateTreeChildNodeString","generateTreeChildNodeString err");
}
int i = 0;
for(Iterator it = l.iterator();it.hasNext();i++){
if(i>0){
sb.append(",");
}
ProdTypeBean item = (ProdTypeBean)it.next();
sb.append(generateNodeString(item));
}
sb.append("]");
return sb.toString();
}
private String generateLinkString(ProdTypeBean item){
return "<a href='../../CommendProduct?typeId="+item.getPT_ID()+"' target='main' >"+item.getPT_NAME()+"</a>";
}
private String generateNodeString(ProdTypeBean item){
StringBuilder sb = new StringBuilder();
sb.append(" {");
sb.append(" /"text/": /""+generateLinkString(item)+"/"");
try {
if(prodTypeDao.hasSubItem(item.getPT_ID())){
sb.append(", /"id/":/""+item.getPT_ID()+"/"");
sb.append(", /"hasChildren/":true");
}
} catch (ActionException e) {
e.printStackTrace();
return "{}";
}
sb.append(" }");
return sb.toString();
}
private String generateInitTreeString() throws ActionException{
int typeId_ = 0 ;
Connection conn = null;
//hasSubItem
StringBuilder sb = new StringBuilder();
sb.append("[");
ArrayList<ProdTypeBean> l;
try {
l = prodTypeDao.fetchSubItem(typeId_);
} catch (ActionException e) {
e.printStackTrace();
throw new ActionException("generateInitTreeString err","generateInitTreeString err","generateInitTreeString err");
}
int i = 0;
for(Iterator it = l.iterator();it.hasNext();i++){
if(i>0){
sb.append(",");
}
ProdTypeBean item = (ProdTypeBean)it.next();
sb.append(generateNodeString(item));
}
sb.append("]");
return sb.toString();
}
}
分享到:
相关推荐
**jQueryTree Async 异步加载详解** 在Web开发中,数据的异步加载已经成为提高用户体验的重要手段。jQueryTree是一款基于jQuery的树形控件,它支持异步加载数据,允许用户在需要时按需获取数据,减少初始页面加载...
在IT行业中,jQuery Tree是一种广泛使用的JavaScript库,用于在网页上创建交互式的树形结构,尤其适用于数据组织和导航。jQuery Tree的样式多样性是其一大亮点,它允许开发者根据项目需求定制各种外观和功能,从而...
**jQuery Tree插件详解** jQuery Tree插件是一种基于JavaScript库jQuery的交互式树形视图组件,用于在网页上创建可折叠、可展开的层级结构,通常用于展示目录、文件系统或者组织数据。这种插件使得用户能够以更加...
在本文中,我们将探讨几款常用的JQuery Tree插件,并进行一次简单的比较,以帮助开发者选择最适合他们项目需求的插件。JQuery Tree插件主要用于创建可交互的、层次化的目录结构,通常用于文件管理系统、组织结构展示...
在IT领域,jQuery Tree插件是一种广泛用于网页端的数据展示工具,它允许用户以树状结构展示数据,常用于文件目录、组织结构或导航菜单的呈现。本话题将深入探讨如何为jQuery Tree添加文件过滤功能,以提升用户体验并...
《jQueryTree:构建高效左菜单树的实例解析》 在Web开发中,为了提供用户友好的界面和良好的导航体验,菜单树是一种常见的设计元素。尤其是对于内容丰富的网站或应用程序,左侧菜单树能够清晰地组织和展示层次结构...
jquery tree插件 运用方法
JQuery Tree例子里面包含了JQuery库JQuery Tree例子里面包含了JQuery库JQuery Tree例子里面包含了JQuery库JQuery Tree例子里面包含了JQuery库JQuery Tree例子里面包含了JQuery库
而"JqueryTree脚本.doc"则可能是关于jQuery Tree的使用指南或教程,包括如何初始化、添加节点、删除节点、展开/折叠节点等功能的说明。 7. **Ajax交互** 在实际应用中,树的数据可能来自服务器,因此需要使用Ajax...
《jQuery Tree:构建高效导航的利器》 在Web开发中,树形结构是一种常见的数据展现方式,它能够清晰地组织和展示层次化的信息,尤其适用于菜单、文件系统或组织架构等场景。jQuery Tree是一个强大的JavaScript库,...
在IT领域,jQuery Tree是一种广泛使用的交互式层进式导航工具,它允许用户以树状结构展示数据,常用于网站的菜单系统、文件目录浏览或数据分类。此项目基于jQuery UI 1.9.1版本进行改造,适用于那些仍然依赖于这个...
**jQuery Tree 插件详解** jQuery Tree 是一个基于 jQuery 库的交互式树形视图插件,它允许用户在网页上以树状结构展示数据。这个插件提供了丰富的功能,如右键操作、节点的展开与折叠、拖放功能等,使得数据管理变...
在网页开发中,jQuery Tree 插件是一种常用的工具,用于展示数据的树形结构,通常用于文件系统、组织结构或层级关系的展现。这里我们列举了12款不同的jQuery Tree插件,它们各自具有独特的特性和优势。 1. **jQuery...
**jQueryTree:强大的JavaScript树形插件** jQueryTree是一款基于jQuery的树形插件,它以其易用性和灵活性而受到开发者的青睐。该插件能够快速地将JSON对象转换为可交互的树结构,适用于数据展示、目录导航、文件...
《jQuery Tree实现与Vue迁移详解》 在网页开发中,数据结构的可视化展示常常成为提升用户体验的关键。jQuery Tree是一款基于jQuery库实现的树形控件,它可以将层级数据以树状结构展示,常用于文件系统、组织架构...
1. **jquerytree.sql**: 这个文件可能是数据库脚本,用于创建与 `jQuery Tree` 配合使用的 MySQL 数据表结构。它可能包含创建表、插入初始数据或设置索引的 SQL 语句。 2. **JqueryTree**: 这个文件可能是一个压缩...
这个"jquerytree控件.rar"压缩包可能包含了一个实现这种功能的JavaScript库,以及相关的图标和样式资源,用于定制和美化树形视图。 一、jQuery Tree控件的基本原理 jQuery Tree控件基于流行的JavaScript库jQuery...
在IT领域,jQuery Tree插件是一种广泛用于网页端的数据展示工具,特别适合处理层次结构的数据,如目录结构、组织架构等。"jQuery tree 无穷节点的树插件"标题所指,是专为处理无限深度节点设计的一款插件,这意味着...
在IT行业中,jQuery Tree是一种基于jQuery库实现的可交互的树形数据结构组件。它允许用户以层次结构展示数据,通常用于网站导航、文件系统显示或者组织复杂的分类信息。在这个主题下,我们将深入探讨两个jQuery Tree...
《jQueryTree:构建直观易用的树形菜单》 在Web开发中,树形菜单是一种常见的用户界面元素,用于组织和展示层次结构的数据。jQueryTree是基于jQuery库的一个插件,它提供了一种简单快捷的方式来创建这样的交互式...