`

struts2 dojo 实现动态树

阅读更多

1.首先写两个工具类:TreeData.java 和 TreeUtil.java

TreeData.java

package com.zjh.shopping.util;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class TreeData {
    public static Map<Integer, TreeData> catMap = new HashMap<Integer, TreeData>();
   
    public static TreeData getById(int id) {
        return catMap.get(id);
    }
   
    private int id;
    private String name;
    private List<TreeData> children;
    private boolean toggle;
    public TreeData(int id, String name, TreeData... children) {
        this.id = id;
        this.name = name;
        this.children = new ArrayList<TreeData>();
        for (TreeData child : children) {
            this.children.add(child);
        }
        catMap.put(id, this);
    }
    public TreeData(){}
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public List<TreeData> getChildren() {
        return children;
    }
    public void setChildren(List<TreeData> children) {
        this.children = children;
    }
    public void toggle() {
        toggle = !toggle;
    }
    public boolean isToggle() {
        return toggle;
    }
}

TreeUtil.java

 package com.zjh.shopping.util;

import java.util.ArrayList;
import java.util.List;

import com.zjh.shopping.dao.TreeBaseDao;


 
public class TreeUtil {
 List<Integer> childrenId;
    public TreeData createTreeData(int parentId,TreeBaseDao treeBaseDao){
      TreeData treeData = new TreeData();
      treeData.setId(parentId);
      treeData.setName(treeBaseDao.getObjectName(parentId)); 
      
        List<TreeData> children = new ArrayList<TreeData>();
     
     childrenId = treeBaseDao.getChildrenId(parentId);
      if(childrenId!=null){
       for(int id :childrenId){
       TreeData c1 = createTreeData(id,treeBaseDao);
       children.add(c1);
       }
       treeData.setChildren(children);
       TreeData.catMap.put(parentId, treeData);
       return treeData;
      }
       else
           TreeData.catMap.put(parentId, treeData);
           return treeData;
       }
   }

2.写dao和它的实现类:

package com.zjh.shopping.dao;

import java.util.List;

public interface TreeBaseDao {
 
 public List<Integer> getChildrenId(int parentId);
 
 public String getObjectName(int id);
}

package com.zjh.shopping.dao;

import com.zjh.shopping.bean.Category;

public interface CategoryDao extends BasicDao<Category>,TreeBaseDao{
   public int getMaxCnoByPid(int pid);
   public int getCnobyId(int id);
}

 

package com.zjh.shopping.dao.impl;

import java.util.List;
import java.util.Map;

import org.hibernate.Query;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.zjh.shopping.bean.Category;
import com.zjh.shopping.dao.CategoryDao;

public class CategoryDaoImpl extends HibernateDaoSupport implements CategoryDao {

 


 public List<Integer> getChildrenId(int parentId) {
  List<Integer> list = null;
  String hql = "select id from Category";
  if(parentId==0){
   hql += " where pid is null";
   
  }else{
   hql += " where pid ="+parentId;
  }
  list = getHibernateTemplate().find(hql);
  return list;
 }

 public String getObjectName(int id) {
  String name = "";
  if(id==0){
   name = "所有类别";
  }else{
   name = getEntity(id).getName();
  }
  return name;
 }

}

3.写action

package com.zjh.shopping.action;


import com.opensymphony.xwork2.ActionSupport;
import com.zjh.shopping.dao.CategoryDao;
import com.zjh.shopping.util.TreeData;
import com.zjh.shopping.util.TreeUtil;

public class ShowCategoryDynamicTreeAction extends ActionSupport {
 private CategoryDao categoryDao;
 public CategoryDao getCategoryDao() {
  return categoryDao;
 }
 public void setCategoryDao(CategoryDao categoryDao) {
  this.categoryDao = categoryDao;
 }


 
 public TreeData getTreeRootNode() {
      TreeUtil treeUtil = new TreeUtil();//call a tree util
      treeUtil.createTreeData(0,categoryDao);//input a corresponding dao
      System.out.println("TreeData.getById(1)  ........."+TreeData.getById(0).getName());
         return TreeData.getById(0);
  }
}

4.显示层页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="sx" uri="/struts-dojo-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <meta http-equiv="Pragma" content="no-cache">
  <meta http-equiv="expires" content="Wed, 23 Aug 2006 12:40:27 UTC" />
  <title>类别树形列表</title>
  <link href="css/Main.css" type="text/css" rel=stylesheet>
  <sx:head />
 </head>
 <body>
  <script language="javaScript" type="text/javascript">
 //dojo tree 加载页面后一次性展开树所有节点
 dojo.addOnLoad( function() {
  expandObj(dojo.widget.byId('categoryTreeId'));//为下面标签的ID
  });
 function expandObj(obj) {
  if (obj) {
   if (obj.children) {
    for ( var i = 0; i < obj.children.length; i++) {
     var childObj = obj.children[i];
     if (childObj) {
      try {
       childObj.expand();
      } catch (e) {
      }
      if (childObj.children) {
       expandObj(childObj);
      }
     }
    }
   }
  }
 }
    //点击树的节点时候触发的事件
 dojo.event.topic.subscribe("treeSelected", function treeNodeSelected(node) {
  dojo.io.bind( {
   url :"<s:url value='showCategoryDynamicTree.action'/>",
   load : function(type, data, evt) {
    //var divDisplay = dojo.byId("displayId");
 
   if (node.node.isFolder == false) {
    //alert("12");
   var cNode = document.getElementByIdx("categoryName");
   cNode.value = node.node.title;

  // cNode.value = node.node.widgetId;
   window.parent.fillStaff(rtnValue);
  }
 },
 mimeType :"text/Html"
  });
 });
</script>

  <input type="text" id="categoryName" readonly="readonly">
  <div>
   <sx:tree id="categoryTreeId" rootNode="%{treeRootNode}"
    childCollectionProperty="children" nodeIdProperty="id"
    nodeTitleProperty="name" treeSelectedTopic="treeSelected">
   </sx:tree>
  </div>
  <div id="displayId" style="display: none;">
   Please click on any of the tree nodes.
  </div>

 </body>
</html>

 

5.配置文件

<action name="showCategoryDynamicTree" class="showCategoryDynamicTreeAction">
       <result>/WEB-INF/category/categoryTreeDOJO.jsp</result>
 </action>

 

6.数据库



 

7.显示结果



 

来自:http://blog.sina.com.cn/s/blog_6145ed810100hawn.html

 

 

  • 大小: 25.1 KB
  • 大小: 12.1 KB
分享到:
评论

相关推荐

    Struts2+Dojo +iBatis树的整合

    在Struts2与Dojo整合时,通常会使用Struts2的dojo-plugin来处理JSON数据,以实现Dojo组件与后台的通信。 然后,iBatis是一个SQL映射框架,它将SQL语句与Java代码分离,使得开发者能够更加灵活地处理数据库查询。...

    struts2-dojo-tree各种实例

    8. **拖放功能**:通过Dojo的dnd模块,可以实现树节点的拖放排序或者移动,这对于管理层次结构数据非常有用。 在实际项目中,你可能需要结合这些实例进行组合,以满足复杂的需求。通过深入理解Struts2的Action、...

    struts2动态树

    总之,Struts2动态树的实现涉及到了数据库操作、MVC设计模式的应用、前端交互逻辑和性能优化等多个方面,它是Java Web开发中一种常见的数据呈现形式,尤其适用于展示层级关系清晰的数据结构。通过熟练掌握这些技术,...

    动态树 Struts2.0

    在给定的资源中,"Struts2动态树.txt"可能包含了实现动态树的代码示例和详细步骤,而"Test"可能是一个测试类或者包含测试用例的文件。 以下是关于Struts2.0动态树的知识点: 1. **配置Action**: 在Struts2中,你...

    struts标签写成树形结构。不比dtree差

    而在这里,提到了Struts2实现的树形结构并不逊色于dtree,这可能是因为Struts2结合其dojo插件或其他类似插件,能够生成具有类似交互性和视觉效果的树形视图。 "struts2-dojo-plugin-2.1.0.jar"这个文件是Struts2 ...

    struts2_jodo_tree

    Struts2作为一款流行的Java Web应用框架,结合JavaScript库Dojo(通常简称为Dojo或者Dojo Toolkit),可以方便地实现这种树形结构的动态展示。本文将基于提供的文件信息,详细介绍如何利用Struts2和Dojo来实现动态树...

    java无限递归树+struts2

    "struts2源码+java树"这部分可能涉及到查看Struts2框架的源代码,理解其工作原理,以及如何在Java代码中实现无限递归树的构建和渲染。 在实际项目中,"javaTree"可能是一个包含实现无限递归树所需类和方法的Java...

    Struts2 标签使用简介

    Struts2的标签库不仅限于核心库,还可以通过插件机制添加第三方标签库,如Struts2-dojo-plugin、Struts2-jquery-plugin等,这些插件提供了丰富的UI组件,如日期选择器、下拉树等。 总结,Struts2标签库是其强大功能...

    实现静、动态树形菜单的代码

    根据提供的文件信息,本文将详细解释如何通过使用Struts2框架来实现静态及动态树形菜单的方法,并且会深入分析代码中的关键元素和技术要点。 ### 一、项目环境配置 在构建一个支持树形菜单的Web应用之前,首先需要...

    struts-2.3.15.3所以jar包

    4. **struts2-dojo-plugin.jar**:这个插件提供了与Dojo JavaScript库的集成,帮助开发者创建富客户端的Web应用,提供诸如日期选择器、下拉树、滑块等交互控件。 5. **struts2-spring-plugin.jar**:如果项目使用...

    Struts2数Tree

    本文将深入介绍Struts2 Tree标签的两种形式:静态树与动态树,并通过具体实例进行讲解。 #### 二、静态树 静态树是在页面加载时即构建好的树形结构,适用于数据量较小且固定的场景。其创建过程较为简单,主要包括...

    dojo中文++++资料

    这个"dojo中文++资料"包含的是针对Dojo框架的中文教程和实践案例,特别强调了与Struts的整合、动态树结构的构建以及绘图功能的实现,这些都是在Web应用开发中常见的需求。 **Dojo框架** Dojo框架是一套全面的前端...

    3STRUTS2.0系列教程(十四)STRUTS2与AJAXDOJO(第二部分)[收集].pdf

    本文主要探讨的是如何在Struts2中正确配置和使用AJAX,特别是通过Dojo库以及标签来实现动态树形结构。 在Struts2的showcase中,标签有两个示例,一个是静态树,另一个是动态树。静态树是在编写JSP代码时通过标签...

    struts2中核心知识点(职场必备)

    Struts2作为MVC模式的一种实现,提供了一系列优点。例如,模块化设计简化项目管理,自动处理客户端请求(包括参数转换、数据封装、数据验证、国际化显示和文件上传),并通过Dojo库支持AJAX,使用OGNL(Object-...

    ajax动态生成树型菜单

    在本项目中,我们将探讨如何使用Ajax、Struts2框架以及Dojo库来动态地从数据库中获取数据并生成树型菜单。这个功能常见于网站的导航系统,允许用户以层级结构浏览和操作数据。 首先,`Ajax`(Asynchronous ...

    网上购物struts2+spring+jpa+ajax

    该项目是一个基于Struts2、Spring、JPA和Ajax技术实现的网上购物系统。这个系统的主要目的是为了演示如何在实际开发中整合这些技术,提供一个功能完善的电商应用框架。以下是对这些关键技术点的详细解释: **Struts...

    Java高级框架开发struts篇

    Struts 2有一个丰富的插件生态系统,比如Struts2-dojo-plugin用于集成Dojo库,Struts2-convention-plugin简化了配置,还有其他如REST、JSON等插件,极大地丰富了框架的功能。 通过深入学习和实践"Java高级框架开发...

    个人spring&struts学习笔记

    6. **插件支持**:Struts2 具有丰富的插件库,如 Struts2 jQuery Plugin 和 Struts2 Dojo Plugin,可快速构建用户界面。 在个人学习过程中,你可以从以下几个方面入手: 1. 学习 Spring 的基本概念和核心组件,理解...

    Struts_2.0从入门到精通

    Struts2.0通过集成JSON插件和Dojo库,实现了与AJAX技术的深度结合。开发者可以利用、、等标签,轻松实现异步请求、自动补全等功能,提升用户体验。 十四、Struts2.0的高级主题和自定义功能 Struts2.0不仅在基础...

    struts2 tree标签属性

    ### Struts2 Tree标签属性详解 #### 一、引言 在Struts2框架中,Tree标签是一个非常有用的UI...正确理解和使用这些属性可以帮助开发者更高效地实现树形结构的展示,同时提高用户体验。希望本文的内容对你有所帮助。

Global site tag (gtag.js) - Google Analytics