`
sheva.wen
  • 浏览: 38842 次
  • 性别: Icon_minigender_1
  • 来自: 呼和浩特
社区版块
存档分类
最新评论

如何使用GWT-Ext 进行RIA开发

    博客分类:
  • GWT
阅读更多

个人觉得,GWT的客户端表现并不是Gwt这个项目最关心的方向,所以要做出表现丰富的界面,要花去不少心思,当你为做一个“可排序的Grid”被搞得焦头烂额时,想想EXT,DOJO,只有艳羡地分了。

GWT-Extsanjiv.jivan为了丰富GWT的客户端表现而贡献的开源项目。项目结合了当前客户端表现和用户体验都相当完善的Ext,提供了一种操作性很强的RIA开发方式。

作者应该花了不少心思在项目上,更新很频繁,大概不到1个月就有新的版本问世,目前项目的版本为GWT-Ext 0.9.3,是 Ext 1.1.1 和 GWT 1.4 Final 的结合,在 Ext 方面实现了大多数常用的控件,如Grid、Tree、Form、TabPanel等等。具体实现效果可以查看项目中的 Showcase Demo

以下结合一个例子来演示一下如何使用GWT-Ext 做实际开发。

一定要认真阅读项目中的 GettingStarted ,下面起初的几段其实就是该文的中文译本。

一、在Gwt项目中集成GWT-Ext

1.下载gwtext-0.9.3.zip,之后解压,将其中的 gwtext.jar 附加到当前GWT项目(Tree)的BuildPath中。

2.下载ext-1.1.1.zip (注意:暂时还不支持最新的2.0版本),将的ext-all.js、ext-core.js以及resources和adapter两个目录拷贝到module的public中的js/ext位置。对Ext熟悉的话,可以只拷贝需要的文件而不必载入所有的资源文件。

3.修改GWT项目中module的html页面,添加Ext资源,修改后的html页面可能是这样:

html代码
  1. <html>  
  2.     <head>  
  3.        
  4.         <title>Wrapper HTML for Treetitle>  
  5.   
  6.         <meta name='gwt:module' content='showcase.Tree'/>  
  7.   
  8.         <link type="text/css" rel='stylesheet' href='Tree.css'/>  
  9.            
  10.         <link rel="stylesheet" type="text/css" href="js/ext/resources/css/ext-all.css"/>  
  11.         <link rel="stylesheet" type="text/css" href="js/ext/resources/css/xtheme-aero.css" />  
  12.         <script type="text/javascript" src="js/ext/adapter/yui/yui-utilities.js">script>  
  13.         <script type="text/javascript" src="js/ext/adapter/yui/ext-yui-adapter.js">script>  
  14.         <script type="text/javascript" src="js/ext/ext-all.js">script>  
  15.            
  16.     head>  
  17.   
  18.     <body>  
  19.   
  20.         <script language="javascript" src="gwt.js">script>  
  21.   
  22.         <iframe id="__gwt_historyFrame" style="width:0;height:0;border:0">iframe>  
  23.   
  24.     body>  
  25. html>  

 

4.编辑项目的Tree.gwt.xml文件,添加以下

xml 代码
  1. <inherits name='com.gwtext.GwtExt'/>  

通过以上步骤,你就可以写接近Ext功能的客户端界面了,同时也具有了Gwt的各种开发优势了,比如Java方式开发,清晰的RPC(这点尤其是在客户端需要获取服务器端数据信息时尤其方便)等等。

二、实例

下面我们就编写Showcase Demo 中的Tree节点下的Two Trees Drag & Drop,例子实现的是两个Tree中节点的任意拖放(再次感叹Ext的丰富表现)。

Tree.java代码如下,可直接拷贝到查看效果。

java 代码
  1. package showcase.client;   
  2.   
  3. import com.google.gwt.core.client.EntryPoint;   
  4. import com.google.gwt.user.client.ui.HorizontalPanel;   
  5. import com.google.gwt.user.client.ui.RootPanel;   
  6. import com.gwtext.client.widgets.tree.AsyncTreeNode;   
  7. import com.gwtext.client.widgets.tree.AsyncTreeNodeConfig;   
  8. import com.gwtext.client.widgets.tree.TreePanel;   
  9. import com.gwtext.client.widgets.tree.TreeNode;   
  10. import com.gwtext.client.widgets.tree.DropNodeCallback;   
  11. import com.gwtext.client.widgets.tree.TreePanelConfig;   
  12. import com.gwtext.client.widgets.tree.XMLTreeLoader;   
  13. import com.gwtext.client.widgets.tree.XMLTreeLoaderConfig;   
  14. import com.gwtext.client.widgets.tree.event.TreePanelListenerAdapter;   
  15. import com.gwtext.client.dd.*;   
  16. /**  
  17.  * Entry point classes define onModuleLoad().  
  18.  */  
  19. public class Tree implements EntryPoint {   
  20.     public void onModuleLoad() {   
  21.         RootPanel rootPanel = RootPanel.get();   
  22.         HorizontalPanel horizontalPanel = new HorizontalPanel();   
  23.         rootPanel.add(horizontalPanel);   
  24. //      create source countried tree   
  25.         final TreePanel treePanel = new TreePanel("coutries-grouped"new TreePanelConfig() {   
  26.             {   
  27.                 setAnimate(true);   
  28.                 setEnableDD(true);   
  29.                 setContainerScroll(true);   
  30.                 setRootVisible(true);   
  31.             }   
  32.         });   
  33.   
  34.         final XMLTreeLoader loader = new XMLTreeLoader(new XMLTreeLoaderConfig() {   
  35.             {   
  36.                 setDataUrl("countries-grouped.xml");   
  37.                 setMethod("get");   
  38.                 setRootTag("countries");   
  39.                 setFolderTitleMapping("@title");   
  40.                 setFolderTag("continent");   
  41.                 setLeafTitleMapping("@title");   
  42.                 setLeafTag("country");   
  43.                 setQtipMapping("@qtip");   
  44.                 setIconMapping("@icon");   
  45.             }   
  46.         });   
  47.   
  48.         AsyncTreeNode root = new AsyncTreeNode("Countries"new AsyncTreeNodeConfig() {   
  49.             {   
  50.                 setLoader(loader);   
  51.             }   
  52.         });   
  53.   
  54.         treePanel.setRootNode(root);   
  55.         treePanel.render();   
  56.   
  57.         root.expand();   
  58.         treePanel.expandAll();   
  59.   
  60. //      create target vacation tree   
  61.         final TreePanel tripTreePanel = new TreePanel("vacation-tree"new TreePanelConfig() {   
  62.             {   
  63.                 setAnimate(true);   
  64.                 setEnableDD(true);   
  65.                 setContainerScroll(true);   
  66.                 setRootVisible(true);   
  67.             }   
  68.         });   
  69.   
  70.         final XMLTreeLoader tripLoader = new XMLTreeLoader(new XMLTreeLoaderConfig() {   
  71.             {   
  72.                 setDataUrl("trip.xml");   
  73.                 setMethod("get");   
  74.                 setRootTag("vacations");   
  75.                 setFolderIdMapping("@title");   
  76.                 setFolderTag("trip");   
  77.                 setQtipMapping("@qtip");   
  78.                 setIconMapping("@icon");   
  79.                 setAttributeMappings(new String[]{"@trip"});   
  80.             }   
  81.         });   
  82.   
  83.         AsyncTreeNode tripRoot = new AsyncTreeNode("Places to Visit"new AsyncTreeNodeConfig() {   
  84.             {   
  85.                 setLoader(tripLoader);   
  86.             }   
  87.         });   
  88.   
  89.         tripTreePanel.setRootNode(tripRoot);   
  90.         tripTreePanel.render();   
  91.   
  92.         tripRoot.expand();   
  93.         tripTreePanel.expandAll();   
  94.   
  95. //      add trip tree listener that handles move / copy logic   
  96.         tripTreePanel.addTreePanelListener(new TreePanelListenerAdapter() {   
  97.             public boolean doBeforeNodeDrop(TreePanel treePanel, TreeNode target, String point, DragDrop source, TreeNode dropNode, DropNodeCallback dropDropNodeCallback) {   
  98.                 if("true".equals(target.getAttribute("trip"))) {   
  99.                 }   
  100.                 return true;   
  101.             }   
  102.         });   
  103.         horizontalPanel.add(treePanel);   
  104.         horizontalPanel.add(tripTreePanel);   
  105.     }   
  106. }   

 注意:例子中需要的两个数据文件需放置于public目录,熟悉Ext的应该很清楚。

编译后执行的效果如下图:

 

以上示例只是将该种开发方式的流程顺了一下,窥一斑以示全貌,Ext各种丰富的表现都可以实现。闲下来,再写一下将数据提供(其实就是一些多维数据而已)方式改为RPC,这样开发流程就完整了。

可以下载示例程序运行一下,证明我没骗你

 

  • 描述: 示例的运行效果
  • 大小: 73.3 KB
分享到:
评论
11 楼 KKD 2008-10-29  
sheva.wen 写道
@zhangcheng
感觉GWT还有一段路要走,现在还不能得到普遍的接受


对js实现的模拟桌面效果的框架怕怕 狂耗内存和cpu 老机器跑起来很吃力 不利于推广
10 楼 sheva.wen 2008-10-11  
@zhangcheng
感觉GWT还有一段路要走,现在还不能得到普遍的接受
9 楼 zhangcheng 2008-10-10  
我也比较喜欢gwt本身
8 楼 aolygc 2008-07-24  
我也是这样,为什么?好奇怪
找不到GWT.ext.xml,jar也放进相应路径了,inherits也写了
不知道怎么回事
7 楼 zSun 2008-07-22  
找不到GWT.ext.xml,jar也放进相应路径了,inherits也写了
不知道怎么回事
6 楼 纯情小火鸡 2008-03-05  
楼上的用GWT做过地图没?呵呵 要是做过或想做的话联系我下好吗?QQ:57191841
5 楼 ztkx 2008-03-05  
编译是成功的,但是shell的时候会报错,因为找不到GWT.ext.xml,jar也放进相应路径了,inherits也写了
4 楼 beijixuem 2008-02-24  
感觉不错呀!学习中!
3 楼 cloudyofsky 2007-11-14  
还是比较喜欢mygwt,毕竟它是gwt的扩展
2 楼 sheva.wen 2007-11-14  
@stone
mygwt同样是一个不错的GWT扩展,只是发展的时间短了些,功能还不是很多,希望能有个好的势头,毕竟不需要JSObject来连接了,结构简单了许多。
1 楼 stone 2007-11-14  
呵呵,使用gwt就尽量不要再粘上其他js的东东,当然那个gwt.js例外。
如果楼主觉得extjs不错的话,倒是推荐使用mygwt这个在extjs上构建的gwt framework,它将extjs的组件完全用gwt实现,而不是使用extjs的js脚本

相关推荐

    最好的gwt-ext学习资料

    Gwt-Ext,作为一个结合了Google Web Toolkit(GWT)和ExtJs的高级网页开发控件库,为纯Java语言的富互联网应用程序(RIA)开发提供了强有力的支持。尤其对于初学者而言,Gwt-Ext不仅简化了复杂的前端开发流程,还...

    gwt-ext 实例

    GWT (Google Web Toolkit) 是一个开源的Java开发框架,用于构建和部署富互联网应用程序(RIA)。它允许开发者使用Java语言编写客户端代码,然后由GWT编译器将其转换为优化过的JavaScript,可以在各种浏览器上运行。...

    gwt-ext-tree

    GWT 是一个用于构建富互联网应用程序(RIA)的 Java 开发框架,允许开发者使用 Java 语言编写客户端代码,然后自动编译为优化过的 JavaScript。 在 GWT-Ext-Tree 中,核心知识点主要包括以下几个方面: 1. **树形...

    非常好的gwt-ext培训教程

    通过上述步骤,开发者能够在 Java 环境下进行 GWT-Ext 应用的开发和调试,从而提高开发效率。GWT-Ext 的出现,使得开发者可以在熟悉的 Java 语言环境中,利用 ExtJs 的丰富界面组件,轻松构建出具有高级交互特性的...

    Gwt-Ext学习笔记之进级篇

    GWT是一个开源的开发工具,允许开发者使用Java语言来编写客户端的Web应用程序,然后将其编译为优化过的JavaScript代码,以实现高性能的富互联网应用(RIA)。而Ext Js是一个JavaScript库,提供了丰富的用户界面组件...

    GWT-Ext_体验之旅.doc

    - **Eclipse 和 Cypal Studio**:为了搭建 GWT-Ext 开发环境,通常推荐使用 Eclipse 集成开发环境,并安装 Cypal Studio 插件,它简化了 GWT 项目的创建、调试和部署过程。 - **配置 GWT 和 Java VM**:设置 GWT ...

    Gwt-Ext学习笔记之基础篇- www.hxiaseo.cn技术网站

    压缩包文件"gwtext-2.0.3"可能包含的是Gwt-Ext的一个特定版本,2.0.3,这个版本可能包含了库文件、示例代码、文档等资源,供学习者参考和使用。在这个版本中,开发者可以找到各种UI组件的示例,如表格、面板、按钮、...

    gwt-ext-选课系统

    GWT是一种由Google开发的开源JavaScript框架,它允许开发者使用Java语言来编写前端应用程序,并自动编译成优化的JavaScript代码,提高了开发效率和性能。EXT则是一个用于构建富互联网应用(Rich Internet ...

    GWT EXT 教程全集

    GWT是Google推出的一个用于开发富互联网应用程序(RIA)的开放源代码框架,它允许开发者使用Java语言编写客户端应用,然后自动编译成JavaScript。EXT-GWT则是基于GWT的组件库,提供了丰富的用户界面元素,让开发者...

    gwtext编写的小系统

    GWText是一个基于Google Web Toolkit (GWT) 和EXT GWT (GXT) 框架的开源项目,用于构建富互联网应用程序(Rich Internet Applications, RIA)。这个“gwtext编写的小系统”是一个示例项目,旨在帮助初学者理解如何...

    GWT+EXT+STRUTS2+Eclipse完整范例.rar

    标题 "GWT+EXT+STRUTS2+Eclipse完整范例.rar" 提示我们这是一个包含一个集成开发环境Eclipse的项目,该项目集成了Google Web Toolkit (GWT), EXT JS 和Struts2框架。描述 "整合 GWT EXT STRUTS2 Eclipse 范例" 明确...

    英文版Developing with EXT-GWT-book

    《Developing with ExtGWT: Enterprise RIA Development》是一本针对ExtGWT框架的专业指导书籍,旨在帮助Java开发者快速掌握并运用ExtGWT进行企业级富互联网应用(RIA)的开发。本书由Grant K. Slender撰写,全书共...

    New of GWT Introduction--GWT开发快速入门

    Google Web Toolkit(GWT)应运而生,它是Google推出的一个用于构建Ajax应用的开源开发包,主要特点是允许开发者使用Java语言进行Ajax应用的编写。 选择GWT的原因在于,Java作为企业级应用的主流语言,拥有成熟的...

    EXT-GWT(GXT)2.2.3 API DOC.zip

    EXT-GWT,全称为Ext GWT,是Sencha公司开发的一个强大的Java库,用于构建富互联网应用程序(RIA)。GXT是EXT-GWT的扩展,它提供了更多组件、样式和功能,使得开发者能够创建出与桌面应用相媲美的用户体验。GXT 2.2.3...

    developing_with_ext_gwt_enterprise_ria_development.pdf

    2. **企业级RIA开发**:书中的实践方法论针对的是希望使用经过行业验证的工具进行企业级RIA开发的开发者。它强调了快速有效地掌握领先商业RIA工具和库的重要性。 3. **设置与环境**:首先,书中详细介绍了如何配置...

    EXT-GWT(GXT) 2.2.4 JAVA API DOC chm 版

    EXT-GWT,全称为Ext GWT,是Sencha公司推出的一款基于Java的开源富互联网应用程序(Rich Internet Application,RIA)开发框架。GXT是EXT-GWT的简称,它提供了丰富的用户界面组件,允许开发者用Java代码来构建复杂的...

    Developing with Ext GWT Enterprise RIA Development.pdf完全版

    本书旨在帮助Java开发者快速掌握如何使用Ext GWT框架开发企业级RIA(Rich Internet Application,富互联网应用)。 #### 二、主要内容 本书共约140页,主要涵盖了以下几个方面: 1. **入门指南**:首先介绍了如何...

    Developing with Ext GWT Enterprise RIA Development

    Developing with Ext GWT Enterprise RIA Development

Global site tag (gtag.js) - Google Analytics