`
shupili141005
  • 浏览: 120286 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类

(更新版)利用ExtJS Tree的TreeNode(Json格式)在Struts 2中实现Ajax真正的动态异步加载树

阅读更多

这次能改进,我得写一个人--斌哥。他也是刚开始学JavaScript,加我QQ,我们是这样认识的。parentId node 属性都是他创造的,也是动态异步加载的关键部分之一。这次的改进,我个人认为这应该是动态加载最简洁的做法。如有其它,还望高人指教,Advance in thanks!

 

欣赏该文章的朋友,我建议先欣赏下面这篇,肯定对你有惊喜。我是在下面这篇实战的基础上实现本文的实战的。

(惊喜等你拿!)ExtJS Tree利用json(直接传List TreeNode,不需要转化为JSONArray或通过JSP传)在Struts 2实现Ajax动态加载树结点

Ext.onReady(function(){
    Ext.BLANK_IMAGE_URL = '../ext-2.0.2/resources/images/default/s.gif'; // 根据项目中 s.gif 所在的目录设置
    Ext.QuickTips.init();

    // shorthand
    var Tree = Ext.tree;

    var loader = new Tree.TreeLoader({
        dataUrl: '' // 可以是 '../admin/dicEmployeeList.action?skey=9039',而不改变该参数,只要在每次调用 Action 之前传入所需的参数
    });
    
    // set the root node
    var root = new Tree.AsyncTreeNode({
        id :'root',
        text: 'Root'
        ,expanded: true
        ,draggable: false,    // disable root node dragging
        hrefTarget: 'centerFrame'    // Target frame for the link
    });

    var tree = new Tree.TreePanel({
        id :'tree'
        ,root: root
        ,rootVisible :false,
        autoScroll: true, animate: true,
        containerScroll: true,  border :false,
        enableDD: true,// dropConfig: {appendOnly: true},
        margins :'5 5 4 5', title :'ManagerSystem',
        loader: loader,
        bodyStyle :'background:#fff url(../images/bgImage/treeBg200.gif) repeat-x 0 0;'
    });

//        root.href = 'userinfo/viewUserInfo.html';    // URL of the link used for this node
        
        var flag = true;
        tree.on('beforeload', function(node){

            /* dataUrl 可以不用改变 */
            if(flag) {
                tree.loader.dataUrl = '../admin/dicDepartmentList.action?skey=9039';
                flag = false;
            } else {
                tree.loader.dataUrl = '../admin/dicEmployeeList.action?skey=9039';
            }

            /* 在 *.js 文件中,往 *.action 中传入参数,可以有多个参数 */

            var submitState = Ext.getCmp('id_SubmitState').getValue();

            Ext.apply(this.baseParams, {

               submitState : submitState // 对于红色的 submitState 在 Action 类中必须有setSubmitState()函数, 以便Struts 2 的 IoC 容器可以根据设值方法往 Action 中注入 该属性,请看最后部分

               ......

            }


        });

        tree.addListener('beforeclick', function(node, e){
            if(node.isLeaf()) {    //否则直接展开

               node.expand(false, false);
            } else {    // 若被选中节点还包含子节点且从未加载过,则增加下一层子节点

               //  自动调用 Action
            }    // if end
        });    // addListener end
        /*
        tree.addListener('load', function(node){
            console.log(node);  // 在 Firefox 的 Firebug 插件的控制台输出 node 节点信息
        });

        */

        // 注意: render 一定要放在 beforeload 事件后面,否则可能得不到你想要的结果
        // Important point: Render tree to document body when the code is running here
        tree.render(Ext.getBody());

});

 

在 *.java 文件中的代码如下:

@SuppressWarnings("serial")
public class YearCheckStateInAction  extends ActionSupport{

   private String submitState;

 

   public String getSubmitState() {
        return submitState;
    }

    public void setSubmitState(String submitState) {
        this.submitState = submitState;
    }

}

 

如想要实现像复选框这样的但是只有在叶子节点单选的 ,只要稍微改变一下上面代码即可(需要将两篇文章结合):

// TreeNode. java 文件

public class TreeNode {

       // 只要增加该属性即可

       private Boolean checked;

}

 

// 在 ApplyFormAction. java 文件的 viewAsTreeByAdmin() 函数中增加一下代码即可:

       treeNode.setChecked(true); // 针对叶子节点

//       treeNode.setChecked(true); // 针对非叶子节点

 

// js 文件,这是为了在前台实现单选功能用

var preId = null;
listeners: {
      'checkchange': function(node, checked) {
      if(preId !== null)
      node.parentNode.findChild('id', preId).ui.toggleCheck(!checked);
      preId = node.id;
      }
  }

 

大功告成!

 

 

版权声明:

如果大家要转载本文,我非常荣幸。但请参加转载网址,谢谢!

1
0
分享到:
评论

相关推荐

    ExtJS_Tree利用_JSON_在Struts_2实现Ajax动态加载树结点

    在本文中,我们将深入探讨如何使用ExtJS框架的Tree组件,结合JSON数据格式以及Struts 2框架,来实现Ajax动态加载树形结构的节点。这是一项常见的需求,特别是在构建可扩展、用户友好的Web应用时,动态加载的树结构...

    Extjs Tree + JSON + Struts2 例子

    在本文中,我们将探讨如何结合 ExtJS、JSON 和 Struts2 实现一个动态加载的树形菜单。ExtJS 是一个流行的 JavaScript 框架,用于构建富客户端应用,它支持多种数据源,包括 JSON。Struts2 是一个 Java Web 开发框架...

    Extjs Tree + JSON + Struts2 示例源代码

    ExtJS Tree + JSON + Struts2 示例源代码是结合了三种技术来实现一个动态的、交互式的树形数据展示的应用。这个示例中,ExtJS用于前端UI的构建,JSON作为数据交换格式,而Struts2则作为后端MVC框架处理请求和返回...

    Extjs Tree + JSON + Struts2

    4. **AJAX 技术**: 在这个项目中,ExtJS Tree 可能使用 AJAX(Asynchronous JavaScript and XML)技术异步地从服务器获取 JSON 数据,这使得用户无需刷新整个页面就能更新树视图。通过 `Ext.Ajax.request` 或者 `Ext...

    extjs tree + json+struts2示例源代码

    本示例将详细介绍如何结合ExtJS的Tree组件、JSON数据格式以及Struts2框架,构建一个动态的树形结构展示系统。 首先,我们要理解ExtJS Tree组件。它是一种可扩展的树状视图,用于展示层次结构的数据。在ExtJS中,...

    extjs tree 异步加载树型

    在 ExtJS Tree 中实现异步加载,主要涉及以下几个关键点: 1. **TreeStore**:存储树节点数据的模型,可以配置 `proxy` 来指定数据来源。对于异步加载,一般使用 `ajax` 类型的 proxy,并设置 `url` 参数指向服务器...

    ExtJS构造动态异步加载

    本文将深入探讨如何使用ExtJS构建动态异步加载的树形结构,结合AJAX技术实现JSON数据的高效传输。 首先,我们要理解什么是动态异步加载。在传统的网页开发中,如果一次性加载所有数据,可能会导致页面加载速度慢,...

    ExtJs在struts2.0.x下实现动态树的解决方案

    在Struts2框架中,我们通常通过Action类处理用户的请求,并返回JSON或XML数据,这些数据将在前端被解析并用于更新树结构。Struts2与ExtJs的结合,可以通过Struts2的插件如Struts2-ExtJS-plugin或者自定义结果类型来...

    extjs 跟 struts+json

    标题 "extjs 跟 struts+json" 暗示了本文将探讨如何使用ExtJS框架与Struts框架结合,通过JSON数据格式进行交互。ExtJS是一个强大的JavaScript库,用于构建富客户端Web应用程序,而Struts是Java Web开发中的一个MVC...

    ExtJS4+Accordion+SERVLET/STRUTS2+JSON+Ext.tree.Panel实例

    例如,Ext.tree.Panel可能会通过Ajax请求从服务器获取JSON格式的树结构数据,然后动态渲染出树形视图。 Ext.tree.Panel是ExtJS中的一个组件,用于展示树状数据结构。它可以显示多级嵌套的节点,支持拖放操作,节点...

    动态加载extjs tree

    在ExtJS Tree中实现动态加载,主要涉及以下几个关键概念: 1. **TreeStore**: TreeStore是ExtJS Tree的数据源,负责管理树节点的数据。它可以配置为从服务器异步获取数据,通过`proxy`配置项来指定数据源类型,通常...

    extjs动态树struts请求数据

    在ExtJS动态树中,Struts需要将后端数据转化为JSON格式,以便前端解析。JSON对象通常包含键值对,数组和嵌套的对象,可以方便地表示复杂的数据结构。 3. **Struts2 Action和Result**: 在Struts2框架中,Action类是...

    extjs ajax tree(js动态树,无需递归)

    ExtJS AJAX Tree是一种基于JavaScript的动态树形结构,它利用AJAX技术来异步加载节点数据,无需在服务器端生成完整的树结构。这种方式可以显著提高页面加载速度,尤其是在处理大量数据时。ExtJS是一个功能丰富的...

    Extjs_Tree_JSON_ _Struts2_例子

    在这个示例中,前端使用Extjs发送请求到后端,后端通过Struts2处理请求并获取数据,最终将数据转换为JSON格式返回给前端。这符合现代Web应用的数据交互标准。 ### 5. Java Action类实现 #### 知识点概述: Action...

    tree 动态树 extjs ajax

    动态树通常通过Ajax请求来获取并填充数据,从而实现异步加载,提高页面性能。这种特性使得树结构在不阻塞用户界面的情况下,能够逐步加载子节点,减少了初次加载时的数据量。 **ExtJS TreePanel** 在ExtJS中,动态...

    ExtJS4+JSON+Servlet(Struts2)实现登录验证

    在IT行业中,构建Web应用程序是常见的任务,而“ExtJS4+JSON+Servlet(Struts2)实现登录验证”是一个典型的前端与后端交互的场景。这个主题涉及到几个关键的技术点,我们将逐一深入探讨。 首先,ExtJS4是一个流行的...

    struts2与extjs tree的完美结合

    在这个“struts2与extjs tree的完美结合”的示例中,开发者利用了Struts2的Annotation特性来简化配置,以及Struts2JSON插件来处理JSON数据,从而实现在服务器端动态生成和返回Tree节点。Annotation使得开发者能够在...

    Extjs4树结构异步加载

    在ExtJS4中实现树结构的异步加载,主要涉及以下几个关键概念: 1. **TreeStore**: TreeStore是树结构的数据源,它负责管理与服务器之间的数据通信。对于异步加载,我们需要配置TreeStore,设置`autoLoad`为`false`...

    ExtJs + Struts2 + JSON 程序总结

    在前端,EXTJS使用Ajax请求调用Struts2 Action,接收返回的JSON数据,然后动态渲染UI,展示所有订单及其对应的客户信息。 总结来说,ExtJs + Struts2 + JSON 的组合提供了一种高效、灵活的方法来构建富客户端Web...

Global site tag (gtag.js) - Google Analytics