`
jamm19860411
  • 浏览: 86565 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论
阅读更多
        最近在学习ExtJS,发现其服务器端是php,这一点对我们搞java的有点不厚道啊。昨天学习了ExtJS的树,并做了一棵异步更新的树出来,后台的业务逻辑及持久层使用JPA+Spring2.5实现,发下面把步骤贴出来与大家分享。

  

首先准备树的域模型,下面是一地区的域模型对象, Region.java 的代码如下:
@Entity
public   class  Region  {
    @Id
    @GeneratedValue(strategy  =  GenerationType.TABLE)
     private  Long id;

    @Field(name = " 名称 " ,validator = @Validator(name = " string " ,value = " min:2;max:50 " ,required = true ))
    @Column(length  =   100 )
     private  String name;
   
    @Field(name = " 编码 " ,validator = @Validator(name = " string " ,value = " min:2;max:16 " ,required = true ))
    @Column(length  =   100 )
     private  String code;
    @POLoad(name = " parentId " )
    @ManyToOne
     private  Region parent;
    @OneToMany(mappedBy  =   " parent " ,fetch = javax.persistence.FetchType.EAGER)
     private  List < Region >  children  =   new  java.util.ArrayList < Region > ();
     public  Long getId()  {
         return  id;
    }
     public   void  setId(Long id)  {
         this .id  =  id;
    }



Region域模型有parent,也有children,这个完全是一个树的结构,如果把树根砍了话就变成森林了,呵呵这一点跟现实不一样。其它都是setter及getter方法,这里就不多说了。



然后我们就要做针对这个地区信息的添删除改查了。呵呵,添删改查我最拿手了,特别是基于EJS(EasyJWeb+JPA+Spring2)构架的添删改查,一个命令搞定了。这里就不多说了,大家可以直接看我前段时间做的视频演示(http://www.easyjf.com/blog/html/20080102/1015814.html)。当然这个示例由于是分级别的,所以生成的添删改查还要改一改,才支持上下级管理功能。



下面进入我们重点部分,如何在页面中得到一棵表示地区的树。

首先准备一个tree.html,内容如下:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>ExtJS-树示例</title>
<link rel="stylesheet" type="text/css" href="/plugins/extjs/ext-2.0/resources/css/ext-all.css" />
<script type="text/javascript" src="plugins/extjs/ext-2.0/adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="plugins/extjs/ext-2.0/ext-all.js"></script>
<script type="text/javascript" src="tree.js"></script>
</head>
<body>
<div  align="center">
  <p>ExtJS-树的示例</p>
</div>
<div id="tree-div"></div> 
</body>
</html>



注意几个<script>标签,他们是用来引入ext的js以及本示例中用到的树。tree.js的代码如下:
Ext.BLANK_IMAGE_URL = 'plugins/extjs/ext-2.0/resources/images/default/s.gif';
Ext.onReady(function(){
    var tree = new Ext.tree.TreePanel({  
        el:"tree-div",  
        autoScroll:true,
        animate:true,
        width:'100px',
        height:'300px',
        enableDD:true,
        containerScroll: true,
        loader: new Ext.tree.TreeLoader({
            dataUrl:'region.ejf?cmd=getRegion'           
        })
    });
    tree.on("click",function(node,event){alert(node.id);});
    tree.on('beforeload',function(node){       
            tree.loader.dataUrl = 'region.ejf?cmd=getRegion&id='+(node.id!='root'?node.id:"");
        });       
    var root = new Ext.tree.AsyncTreeNode({
        text: '地区信息',
        draggable:false,
        id:'root'
    });
    tree.setRootNode(root);
    tree.render();
       root.expand();
});



其实tree.js的代码跟ExtJS官方示例中的差别不大,这里就不对这个代码作详细的解释,如果你感兴趣的话,可以在后面留言或给我发电子邮件。如果需要的人多的话,我看能否补充。这里把重点的代码强调一下。

loader: new Ext.tree.TreeLoader({
            dataUrl:'region.ejf?cmd=getRegion'           
        })



这个表示通过region.ejf?cmd=getRegion来加载树的数据。另外,由于这里使用的是异步加载,所以还需要加下面一句:

tree.on('beforeload',function(node){       
            tree.loader.dataUrl = 'region.ejf?cmd=getRegion&id='+(node.id!='root'?node.id:"");
        }); 



那么region.ejf?cmd=getRegion是做什么的呢?就是从数据库中查询地区数据,并把他转换成JSon格式就OK了。下面是RegionAction中的getRegion方法的代码,如下所示:

public Page doGetRegion(WebForm form)
    {
        String id=CommUtil.null2String(form.get("id"));       
        RegionQuery query=new RegionQuery();
        query.setPageSize(-1);       
        if(!"".equals(id))
        {
        Region parent=this.service.getRegion(new Long(id));
        query.setParent(parent);       
        }
        IPageList pageList=this.service.getRegionBy(query);
        List<Node> nodes=new java.util.ArrayList<Node>();
        for(int i=0;i<pageList.getResult().size();i++)
        {
            Region region=(Region)pageList.getResult().get(i);
            nodes.add(new Node(region));
        }   
        form.addResult("json",AjaxUtil.getJSON(nodes));
        return Page.JSONPage;
    }



这个代码说白了,就是根据客户端的调用参数id值来加载该id下面的地区节点。RegionQuery是一个地区查询类,主要是我不想写sql或EJBQL,所以就用他了。大家主要看关键的部分,我们在调用service的getRegionBy方法返回的是一个分页的地区Entity。所以要把这个地区Entity转换成与Ext的树节点数据匹配的方式,因此就有了下面一段代码:
List<Node> nodes=new java.util.ArrayList<Node>();
        for(int i=0;i<pageList.getResult().size();i++)
        {
            Region region=(Region)pageList.getResult().get(i);
            nodes.add(new Node(region));
        }   


下面我们看看Node这个类的实现,代码如下:

private class Node {
        private Region region;
        Node(Region region)
        {
            this.region=region;
        }   
        public String getId() {       
            return region.getId().toString();
        }
        public boolean getLeaf() {       
            return region.getChildren().size()<1;
        }       
        public String getText() {           
            return region.getName();
        }   
        public String getQtip()
        {
            return region.getName();
        }
    }



Node直接放在RegionAction中的,所以是Private的。这个Node所做的事就是把服务器的Region这个域模型适配成Ext的树状节点数据。在转换完以后,我们再看doGetRegion中的最后两句代码,如下所示:

    form.addResult("json",AjaxUtil.getJSON(nodes));

    return Page.JSONPage;

第一句代码是调用EasyJWeb中的AjaxUtil.getJSON方法直接把nodes这个List生成JSON数据;第二句告诉EasyJWeb这个模板使用的是JSONPage合成模板。呵呵,这个Page.JSONPage是这几天才加上去的,之前发布的m3没有,其实JSONPage模板的内容非常简单,内容如下:

function(){$!json}()



完成后,把这个Web应用打成war包,然后直接访问tree.html就能看到这个树了,大致如下图所示:



原址:http://www.easyjf.com/blog/html/20080110/1048579.html
分享到:
评论

相关推荐

    动态加载extjs tree

    ExtJS Tree是Ext JS库中的一个组件,用于创建和展示层次结构的数据,通常表现为树形结构。这个组件在Web应用程序中广泛使用,特别是在需要管理有层级关系的数据时,如文件系统、组织架构或者导航菜单等。动态加载是...

    extjs tree 异步加载树型

    ExtJS Tree 是一个基于 ExtJS 框架的组件,用于构建可交互的、层级结构的树形控件。在 Web 开发中,它经常被用来展示目录结构、组织架构或者复杂的分类数据。异步加载树型是 ExtJS Tree 的一个重要特性,允许只在...

    ExtJs Tree

    根据给定的信息,我们可以深入探讨ExtJs中Tree组件的相关知识点,包括其定义、特性以及具体的配置选项等。 ### ExtJs Tree概述 ExtJs Tree是一种基于ExtJs框架的树形控件,它允许开发者构建出复杂的数据层次结构。...

    extjs tree示例

    ExtJS Tree 示例是一种基于ExtJS库实现的交互式树形组件,它允许用户在Web应用程序中展示层次结构数据。在本示例中,我们将探讨如何使用ExtJS来创建、访问和操作一个树形结构,特别是在数据库操作方面,如添加和删除...

    Extjs Tree + JSON + Struts2 例子

    ExtJS Tree 需要的数据结构是一个 JSON 数组,每个元素代表树的一个节点。节点可以包含属性如 "cls"(样式类)、"id"(唯一标识)、"leaf"(是否为叶子节点)以及 "children"(子节点数组)。例如: ```javascript ...

    Extjs Tree + JSON + Struts2 示例源代码

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

    ExtJS Tree教程及例子代码

    ExtJS Tree是Sencha公司开发的ExtJS框架中的一个组件,用于构建可交互的树形数据结构。在网页应用中,树形结构常用于展示层级关系的数据,如目录结构、组织架构或者数据库的表关系。ExtJS Tree组件提供了丰富的功能...

    带复选框的 ExtJs tree

    在给定的文件中,我们关注的是“带复选框的ExtJS tree”这一主题,这涉及到ExtJS框架下的树形组件(TreePanel)如何与复选框结合,为用户提供更为灵活的数据选择和管理方式。 ### 标题解析:“带复选框的ExtJS tree...

    extjs tree 学习资料

    ExtJS Tree 是一个功能强大的JavaScript组件,用于在Web应用程序中创建和展示层次结构的数据,它在ExtJS框架中扮演着重要角色。这个压缩包“extjs tree 学习资料”显然是为那些希望深入理解并掌握ExtJS Tree组件的...

    Extjs tree实例【源代码】

    ExtJs 2.2.1 tree实例,内附mysql数据文件 1. 数据节点一次性加载 2. 节点分为两个类(项目和设备) 3. 右键菜单 4. 节点增、删、改操作 ....... 后台是java struts1。 本例旨在说明extjs的tree操作,后台操作很简陋...

    extjs-tree.zip_extjs tree

    ExtJS Tree是一个强大的JavaScript库,专门用于创建交互式的树形结构。这个"extjs-tree.zip"文件包含了使用Java编写的ExtJS异步树形控件的示例代码,旨在帮助开发者快速理解和应用这一功能。ExtJS是Sencha公司开发的...

    Extjs的tree

    ExtJS的Tree组件是Sencha ExtJS框架中的一个重要部分,用于构建可交互的树形结构数据展示。在ExtJS中,TreePanel是用来显示和操作树形数据的主要组件,它可以用于组织层次化的信息,如文件系统、组织架构或者分类...

    Extjs Tree + JSON + Struts2

    ExtJS Tree + JSON + Struts2 是一个常见的前端与后端交互技术组合,常用于构建动态的、数据驱动的树形结构界面。在这个项目中,`index.html` 是主页面,`tree.js` 包含了 ExtJS 的树组件相关的 JavaScript 代码,`...

    extjs的tree的使用

    在深入探讨ExtJS中Tree组件的使用之前,我们先来了解一下ExtJS本身。ExtJS是一个用JavaScript编写的开源前端框架,旨在帮助开发者构建复杂、高性能的Web应用程序。它提供了丰富的UI组件库,其中包括Tree(树形)组件...

    extjs tree 节点 链接 新窗口

    在ExtJS中,Tree是一个非常重要的组件,它用于呈现层级结构的数据。在处理Tree节点时,特别是涉及到链接和新窗口打开的情况,有一些特定的技术要点需要注意。 首先,标题“extjs tree 节点 链接 新窗口”指的是在...

    struts2与extjs tree的完美结合

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

    extjs tree + json+struts2示例源代码

    ExtJS Tree + JSON + Struts2 示例源代码详解 在Web开发中,构建交互式的用户界面是关键。ExtJS是一个强大的JavaScript库,尤其擅长创建桌面级的Web应用。本示例将详细介绍如何结合ExtJS的Tree组件、JSON数据格式...

    extjs tree CHECKBOX 多选删除未实现(带SQL脚本)

    在网上下载别人的代码,改进加上CHECKBOX ,但是批量删除做不出来,希望高手完成并分享。

    Extjs tree+grid+form+panel 使用实例

    Ext各种组件的使用实例,Extjs tree+grid+form+panel 使用实例

Global site tag (gtag.js) - Google Analytics