`
objectbean
  • 浏览: 15069 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

10.Ext与Dwr

    博客分类:
  • Ext
阅读更多
在EXT中直接使用DWR

因为DWR在前台的表现形式和普通的JavaScript完全一样,所以我们不需要特地去做些什么,
直接使用EXT调用DWR生成的JavaScript函数即可。
以Grid为例,比如现在我们要显示一个通讯录的信息,后台记录的数据有:id、name、sex、email、tel、addTime和descn。
编写对应的POJO,代码如下所示:
  1. public class Info {  
  2.     long id;  
  3.     String name;  
  4.     int sex;  
  5.     String email;  
  6.     String tel;  
  7.     Date addTime;  
  8.     String descn;  
  9. }  
然后编写操作POJO的manager类,代码如下所示:
  1. public class InfoManager {  
  2.     private List infoList = new ArrayList();  
  3.    
  4.     public List getResult() {  
  5.         return infoList;  
  6.     }  
  7. }  
代码部分有些删减,我们只保留了其中的关键部分,就这样把这两个类配置到dwr.xml中,让前台可以对这些类进行调用。 下面是EXT与DWR交互的关键部分,我们要对JavaScript部分做如下修改,如下所示:
  1. var cm = new Ext.grid.ColumnModel([  
  2.     {header:'编号',dataIndex:'id'},  
  3.     {header:'名称',dataIndex:'name'},  
  4.     {header:'性别',dataIndex:'sex'},  
  5.     {header:'邮箱',dataIndex:'email'},  
  6.     {header:'电话',dataIndex:'tel'},  
  7.     {header:'添加时间',dataIndex:'addTime'},  
  8.     {header:'备注',dataIndex:'descn'}  
  9. ]);  
  10.    
  11. var store = new Ext.data.JsonStore({  
  12.     fields: ["id","name","sex",'email','tel','addTime','descn']  
  13. });  
  14.    
  15. // 调用DWR取得数据  
  16. infoManager.getResult(function(data) {  
  17.     store.loadData(data);  
  18. });  
  19.    
  20. var grid = new Ext.grid.GridPanel({  
  21.     renderTo: 'grid',  
  22.     store: store,  
  23.     cm: cm  
  24. });  
注意,执行infoManager.getResult()函数时,DWR就会使用Ajax去后台取数据了,操作成功后调用我们定义的匿名回调函数。 在这里我们只做一件事,那就是将返回的data直接注入到ds中。 DWR返回的data可以被JsonStore直接读取,我们需要设置对应的fields参数,以告诉JsonReader需要哪些属性。 在这里,EXT和DWR两者之间没有任何关系,将它们任何一方替换掉都可以。实际上它们只是在一起运行,并没有整合。 我们给出的这个示例也是说明了一种松耦合的可能性,实际操作中完全可以使用这种方式。 DWR与EXT整合DWRProxy 要结合使用EXT和DWR,不需要对后台程序进行任何修改,可以直接让前后台数据进行交互。不过还要考虑很多细节,比如Grid分页、 刷新、排序、搜索等常见的操作。 EXT的官方网站上已经有人放上了DWRProxy,借助它可以让DWR和EXT连接得更加紧密。不过,需要在后台添加DWRProxy所需要的Java类, 这可能不是最好的解决方案。 但我们相信,通过对它的内在实现的讨论,我们可以有更多的选择和想象空间。 注意 这个DWRProxy.js一定要放在ext-base.js和ext-all.js后面,否则会出错。 我们现在就用DWRProxy来实现一个分页的示例。除了准备好插件DWRProxy.js外,还要在后台准备一个专门用于分页的封装类。 因为不仅要告诉前台显示哪些数据,还要告诉前台一共有多少条数据。现在我们来重点看一下ListRange.java, 如下面的代码所示:
  1. public class ListRange {  
  2.     Object[] data;  
  3.     int totalSize;  
  4. }  
其实ListRange非常简单,只有两个属性:提供数据的data和提供数据总量的totalSize。 再看一下InfoManager.java,为了实现分页,我们专门编写了一个getItems方法,代码如下所示:
  1. public ListRange getItems(Map conditions) {  
  2.     int start = 0;  
  3.     int pageSize = 10;  
  4.     int pageNo = (start / pageSize) + 1;  
  5.    
  6.     try {  
  7.         start = Integer.parseInt(conditions.get("start").toString());  
  8.         pageSize = Integer.parseInt(conditions.get("limit").toString());  
  9.         pageNo = (start / pageSize) + 1;  
  10.     } catch (Exception ex) {  
  11.         ex.printStackTrace();  
  12.     }  
  13.     List list = infoList.subList(start, start + pageSize);  
  14.     return new ListRange(list.toArray(), infoList.size());  
  15. }  
getItems()的参数是Map,我们从中获得需要的参数,比如start和limit。不过HTTP里的参数都是字符串,而我们需要的是数字, 所以要对类型进行相应的转换。 根据start和limit两个属性从全部数据中截取一部分,放进新建的ListRange中,然后把生成的ListRange返回给前台, 于是一切都解决了。 重头戏要上演了,我们就要使用传说中的Ext.data.DWRProxy了,还有Ext.data.List- RangeReader。 通过这两个扩展,EXT完全可以支持DWR的数据传输协议。 实际上,这正是EXT要把数据和显示分离设计的原因,这样你只需要添加自定义的proxy和reader,不需要修改EXT的其他部分, 就可以实现从特定途径获取数据的功能。 后台还是DWR,所以至少在Grid部分,我们可以很好地使用它们的结合,主要代码如下所示:
  1. var store = new Ext.data.Store({  
  2.     proxy: new Ext.data.DWRProxy(infoManager.getItems, true),  
  3.     reader: new Ext.data.ListRangeReader({  
  4.         totalProperty: 'totalSize',  
  5.         root: 'data',  
  6.         id: 'id'  
  7.     }, info),  
  8.     remoteSort: true  
  9. });  
与我们上面说的一样,我们修改了proxy,也修改了reader,其他地方都不需要进行修改,Grid已经可以正常运行了。 需要提醒的是DWRProxy的用法,其中包括两个参数: 第一个是dwr- Call,它把一个DWR函数放进去,它对应的是后台的getItems方法; 第二个参数是paging- AndSort,这个参数控制DWR是否需要分页和排序。 ListRangeReader部分与后台的ListRange.java对应。totalProperty表示后台数据总数, 我们通过它指定从ListRange中读取totalSize属性的值来作为后台数据总数。 还需要指定root参数,以告诉它在ListRange中的数据变量的名称为data, 随后DWRProxy会从ListRange中的data属性中获取数据并显示到页面上。 如果不想使用我们提供的ListRange.java类,也可以自己创建一个类,只要把totalProperty和data两个属性与之对应即可。 DWR与EXT整合DWRTreeLoader 我们现在来尝试一下让树形也支持DWR。有了前面的基础,整合DWR和tree就更简单了。 在后台,我们需要树形节点对应的TreeNode.java。目前,只要id、text和leaf三项就可以了。
  1. public class TreeNode {  
  2.     String id;  
  3.     String text;  
  4.     boolean leaf;  
  5. }  
id是节点的唯一标记,知道了id就能知道是在触发哪个节点了。text是显示的标题,leaf比较重要, 它用来标记这个节点是不是叶子。 这里还是用异步树,TreeNodeManager.java里的getTree()方法将获得一个节点的id作为参数, 然后返回这个节点下的所有子节点。 我们这里没有限制生成的树形的深度,你可以根据自己的需要进行设置。 TreeNodeManager.java的代码如下所示:
  1. public List getTree(String id) {  
  2.     List list = new ArrayList();  
  3.     String seed1 = id + 1;  
  4.     String seed2 = id + 2;  
  5.     String seed3 = id + 3;  
  6.     list.add(new TreeNode(seed1, "" + seed1, false));  
  7.     list.add(new TreeNode(seed2, "" + seed2, false));  
  8.     list.add(new TreeNode(seed3, "" + seed3, true));  
  9.    
  10.     return list;  
  11. }  
上面的代码并不复杂,它实现的效果与在Java中使用List或数组是相同的,因为返回给前台的数据都是JSON格式的。 前台使用JavaScript处理返回信息的部分更简单,先引入DWRTree- Loader.js,然后把TreeLoader替换成DWRTreeLoder即可, 如下面的代码所示:
  1. var tree = new Ext.tree.TreePanel('tree', {  
  2.     loader: new Ext.tree.DWRTreeLoader({dataUrl: treeNodeManager.getTree})  
  3. });  
参数依然是dataUrl,它的值treeNodeManager.getTree代表的是一个DWR函数,我们不需要对它进行深入研究, 它的内部会自动处理数据之间的对
分享到:
评论

相关推荐

    ext 与 dwr 的结合

    在IT行业中,EXT和DWR的结合是一种常见的前端与后端交互技术,它极大地提高了Web应用的用户体验。EXT是一个强大的JavaScript框架,用于构建富互联网应用程序(RIA),而Direct Web Remoting (DWR)则是一个允许...

    ext2+spring+hibernate+dwr.rar_dwr MenuManage.js_ext2 ja

    标题 "ext2+spring+hibernate+dwr.rar_dwr MenuManage.js_ext2 ja" 提示我们这是一个关于集成技术的项目,其中包含了ext2、Spring、Hibernate和DWR(Direct Web Remoting)四个主要组件。这个项目的具体实现是通过...

    ext js配合dwr在java中的用法

    1. **配置DWR**:首先,在Java项目中集成DWR,添加DWR库,然后配置DWR的Context配置文件(如dwr.xml),定义允许JavaScript调用的Java类和方法。 2. **创建Java服务**:在Java后端编写需要暴露给前端的方法,这些...

    封装Ext.grid.Grid+dwr实现增删该查

    `Ext.grid.Grid`是Ext JS库中的一个组件,用于创建可交互的数据网格,而DWR(Direct Web Remoting)则是一种允许JavaScript和Java在浏览器端进行安全、高效通信的技术。本篇文章将深入探讨如何利用这两者结合,实现...

    ext + dwr proxy

    标题“ext + dwr proxy”涉及的技术点是EXT JavaScript库与Direct Web Remoting (DWR)框架的结合使用,创建了一个代理服务。EXT是一个用于构建富互联网应用(RIA)的前端JavaScript库,提供了丰富的组件和数据绑定...

    spring+ext+dwr.rar_ext dwr_ext java_java 用户管理_spring e_spring ex

    《Spring+Ext+DWR整合应用详解:用户管理与实战》 在当今的Web开发领域,Spring、Ext和Direct Web Remoting (DWR) 是三种非常重要的技术,它们各自在不同的层面发挥着关键作用。Spring作为Java企业级应用的框架,...

    简单的ext+dwr例子

    标题"简单的EXT+DWR例子"暗示我们将探讨如何将EXT与DWR集成,创建一个简单的Web应用。这个例子可能是为了展示如何利用EXT的组件和DWR的远程调用来创建一个可直接部署并运行的应用。 首先,EXT的主要组件包括表格、...

    ext+dwr配合简单例子

    "EXT+DWR配合简单例子"这个主题,意味着我们将探讨如何将这两者结合,利用EXT的前端能力与DWR的后端通信能力,构建一个功能完善的Ajax应用。一种简单的配合方式可能是: 1. **前端EXT设置**:首先,在EXT应用中创建...

    ext-dwr-hibernate

    DWR提供了一种安全、高效的远程调用机制,使得EXT组件能够轻松地与服务器进行数据交换。 Hibernate则是一个强大的ORM(Object-Relational Mapping)框架,它简化了Java应用程序与数据库之间的交互。Hibernate通过...

    ext+dwr+....实现时时聊天

    这通常涉及到在web.xml文件中配置DWR过滤器和Servlet,并在应用中创建一个DWR配置文件(dwr.xml),声明允许的远程方法。 3. **服务器端逻辑**:编写Java类,包含处理聊天消息的方法,如接收新消息、存储聊天记录和...

    ext+dwr+MySQL实例(总共4个EXT相关的列子)

    1.DWR 和 Ext 简单例子综合(EXT 2 和 DWR 1 表格编辑控件示例(无数据库版本)) 2.EXT 2 表格编辑控件示例(静态页面,与Java无关版本) 3.文档团队在线通讯录(Ext + DWR + MySQL 4.DWR 检查注册用户名是否存在

    ext+dwr+spring案例

    2. **DWR的配置**:查找DWR的XML配置文件(通常为dwr.xml),理解其中的映射设置,如何暴露Java方法供JavaScript调用。 3. **Spring的配置**:分析Spring的ApplicationContext配置文件,查看bean定义,理解服务层是...

    EXT-DWR-SPRING 整合详细指导

    这通常涉及到编写特定的配置文件(如dwr.xml),声明哪些JavaBean是可公开的,哪些方法可以被远程调用。 4. 将Spring框架整合进你的应用。这部分通常包括配置Spring的依赖注入,将JavaBean配置到Spring容器中,以便...

    Ext + dwr 实现分页功能

    这通常涉及到在项目的`WEB-INF`目录下创建`dwr.xml`文件,并在其中添加相应的配置。 ```xml <create-class-create name="com.example.PagingService"/> ``` ##### 3. 前端页面设计 接下来,设计前端页面,包括...

    EXT+DWR的小例子

    在"EXT+DWR的小例子"中,我们可以假设这是一个展示如何将EXT的UI组件与DWR的远程调用相结合的示例项目。开发者可能创建了一个EXT的界面,其中包含了一些交互元素,如按钮、表格等,当用户在前端进行操作(如点击按钮...

    ext-dwr-spring集成Demo

    具体到这个示例的文件结构,"JavaSource"可能包含了Spring的配置文件(如`applicationContext.xml`)、服务接口和实现类,以及DWR的配置(如`dwr.xml`)。"WebContent"目录则可能包含了EXT的JS库、CSS样式、HTML模板...

    《ajax框架:dwr与ext》实战

    6. **使用ANNOTATION代替DWR.XML配置**: - 探讨如何使用注解来替代XML配置。 - 注解的优势及其应用场景。 7. **ENGINE.JS说明**: - ENGINE.JS是DWR的核心JavaScript库之一。 - 解释其主要职责和内部工作原理...

Global site tag (gtag.js) - Google Analytics