`

GWT中实现跳转及不同entrypoint怎么互相访问

阅读更多
怎么跳转?
跳转这个概念这里指的是从一个web页面跳转到另一个web页面,如果我们使用gwt来开发web,很自然的我们会想到怎么从一个gwt做的页面跳转到另一个gwt做的页面。

但从网上的gwt例子来看,似乎gwt的应用更像一个桌面应用:总的就一个页面,相当于应用程序主体,不同的功能就是不同的gwt控件在做展示。没有像普通的web 应用那样不同的功能是在不同的web页面上,从一个功能到另一个功能就是一个页面跳转到另一个页面。gwt应用更像桌面应用,不同的功能用不同的gwt控件表示,如gwt窗体,gwt对话框,gwt tab等等。各种控件的数据都是通过ajax从服务端取得,gwt把界面定义出来,数据再去取,而不是像传统的web应用那样,一个web页面展示一个功能,同时把数据与界面混合写在一起,返回给客户端

gwt的一个ui module就代表了一个页面,gwt会生成一个相应的html文件,在该文件中加载module生成的js。所以如果要加多个module的话,就得每个module建立自己的html文件,在其中加载自己的module js,一个加载module的html看起来如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
 
    <!--                                                               -->
    <!-- Consider inlining CSS to reduce the number of requested files -->
    <!--                                                               -->
    <link type="text/css" rel="stylesheet" href="Gwtapp.css">
 
    <!--                                           -->
    <!-- Any title is fine                         -->
    <!--                                           -->
    <title>Web Application Starter Project</title>
 
    <!--                                           -->
    <!-- This script loads your compiled module.   -->
    <!-- If you add any GWT meta tags, they must   -->
    <!-- be added before this line.                -->
    <!--                                           -->
    <script type="text/javascript" language="javascript" src="gwtapp/gwtapp.nocache.js"></script>
  </head>
 
  <!--                                           -->
  <!-- The body can have arbitrary html, or      -->
  <!-- you can leave the body empty if you want  -->
  <!-- to create a completely dynamic UI.        -->
  <!--                                           -->
  <body>
 
    <!-- OPTIONAL: include this if you want history support -->
    <iframe src="javascript:''" id="__gwt_historyFrame" tabIndex='-1' style="position:absolute;width:0;height:0;border:0"></iframe>
  </body>
</html>


如果自己加了module,gwt自己不会为它建立相关的html文件,cypal插件就会

现在的问题是,建立好了两个module,也知道了加载他们的html文件名,那如何在一个module里打开另一个module呢?,这个java代码怎么写?

1.  gwt中的java代码会被转换成javascript代码
2. 要能在java代码中写页面的跳转功能
3. 如果在javascript写跳转当然很方便,直接window.lcoation=“url”
4. 所以如果能在java代码中直接写这个javascript代码不就可以实现跳转了吗
5. 所以通过jsni在java代码里直接写javascript不就可以了吗

例如

public static native void redirect(String url)/*-{
      $wnd.location = url;
  }-*/;


6.gwt有没有为我们提供这个接口呢?有就最gwt的<strong>com.google.gwt.user.client.Window</strong>类

不同EntryPoint怎么互相访问
一个EntryPoint就是一个module里包含的模块,负责处理界面上的某个界面内容,GWT会根据它们的定义顺序加载它们
现在项目需要在一个EntryPoint中调用另一个EntryPoint中的方法
整理一下思路

1. 它们都在同一相module下
2. gwt会根据定义的顺序创建他们,并调用他们的onModuleLoad方法
3. GWT应该知道一个module里都有那些entrypoint,并能够访问到它们
4. GWT应该有相关的工厂
5. 但是没找到这个工厂
6. 另一个思路,所有的entrypoint都会被转换成javascript
7. 能不能通过javascript来找到这个entrypoint呢
8. java与javascript怎么互访?
9. 使用jsni,但jsni要访问一个Entrypoint,也得有这个对象的引用,我们现在要知道了就是怎么在一个Entrypoint里得到另一个entrypoint的引用
不过这里记录一下jsni怎么访问java代码,如果访问一个类的方法:
类引用.@类的全名::方法名(方法定义时参数定义)(实参);
类的全名::静态方法名(方法定义时参数定义)(实参);

10。自己写代码来实现这个功能,我们写一个单体的注册类,我们把所有加载的EntryPoint都在这个类上面注册,其它地方使用的时候再从这个注册类里面取得,这是可行的:

public class Register {
 private static Map&lt;String, EntryPoint&gt; registry = new HashMap&lt;String, EntryPoint&gt;();
 public static void register(String name,EntryPoint entry){
  registry.put(name, entry);
 }
 public static EntryPoint getEntryPoint(String name){
  return registry.get(name);
 }
}
 
public void onModuleLoad() {
  Register.register("CreditrightStatisitcs", this);
.....................
 
public void onModuleLoad() {
Register.register("CreditrightListModule", this);
com.google.gwt.user.client.Window.alert("in java:"+((CreditrightStatisitcs)Register.getEntryPoint("CreditrightStatisitcs")).test());


这个成功做到一个EntryPoint访问另一个EntryPoint

以上是原作者的文章,不过想法很好,他说的这种方法我们在开发中以用过不只一次了,什么时候本人将把方法总结后写出来!
分享到:
评论
2 楼 要留清气 2011-11-25  
直接跳转到另一个 html页面,访问权限 如何控制哪?
1 楼 wangmuming1122 2011-08-29  
这个能否说下gwt项目分Entrypoint后,最后怎么样把多个Entrypoint放在一个Entrypoint中展示,即同一个页面,而不是跳出多个页面

相关推荐

    gwt 中实现简单的树状菜单

    在GWT(Google Web Toolkit)中,实现一个简单的树状菜单是常见的需求,尤其是在构建具有层级结构的数据展示或导航功能的Web应用时。GWT提供了一套完整的UI组件库,其中包括Tree和TreeItem类,可以帮助我们轻松创建...

    GWT入门 GWT中文教程

    EXT-GWT的API和DOC文档对于学习和使用EXT-GWT至关重要,它们详尽地介绍了各个组件的用法和功能,帮助开发者了解如何在项目中集成和使用这些组件。 接下来,“Gwt-Ext基础-中级-进阶”这部分教程可能涵盖了从基础到...

    gwt开发实例实现

    在“gwt开发实例实现web +ajax”这个主题中,我们将深入探讨如何使用GWT技术来构建基于Web的、利用Ajax技术的交互式应用程序。 1. **GWT的核心概念** - **Java-to-JavaScript编译器**:GWT的核心特性之一是它的...

    GWT中文教程(入门进阶)

    2. **本地化**:学习GWT的本地化支持,包括多语言资源文件的创建和使用,以适应不同地区的用户需求。 3. **History和HashChange**:GWT提供了History机制,用于处理浏览器地址栏的URL变化,实现无刷新的页面导航。 ...

    Gwt中文手册,GWt入门

    Gwt中文手册,GWt入门Gwt中文手册,GWt入门Gwt中文手册,GWt入门

    GWT中文教程 .

    EXT-GWT2.0.1+API+DOC Gwt-Ext基础-中级-进阶GWT中文教程

    GWT-api文档

    7. **国际化与本地化**:GWT支持多语言应用,只需提供不同的资源包即可轻松实现。 8. **开发工具与调试**:GWT Developer Plugin是一款浏览器插件,用于在开发阶段运行和调试GWT应用,提供断点调试、代码热部署等...

    GWT中的xmlHttpRequest

    在GWT(Google Web Toolkit)开发中,XMLHttpRequest(XHR)是实现客户端与服务器间异步数据交换的关键技术。GWT提供了对XHR的封装,使得开发者可以方便地使用JavaScript的XMLHttpRequest对象,而无需直接接触底层的...

    GWT快速开发(GWT) 是一个Java软件开发框架用于开发类似于Google Maps和Gmail的AJAX应用程序。GWT的设计参考Java AWT包设计,类命名规则、接口设计、事件监听等。你可以用Java编程语言开发你的界面,然后用GWT编译器将Java类转换成适合浏览器执行的...

    - **入口点(EntryPoint)**: 每个GWT模块都有一个主类,这个类必须实现`com.google.gwt.user.client.rpc.EntryPoint`接口,并且有一个`onModuleLoad()`方法作为应用程序的启动点。 2. **开发流程**: - 使用Java...

    GWT开发教程.pdf

    入口点类是GWT应用的核心,它实现了`com.google.gwt.core.client.EntryPoint`接口,并包含`onModuleLoad()`方法。当GWT应用加载时,会首先执行此方法。在这里,你可以编写初始化应用逻辑,包括创建用户界面组件、...

    GWT实现文件上传文件上传

    在GWT中实现文件上传,首先需要理解的是GWT的事件处理机制,因为文件上传通常涉及到用户交互,比如点击按钮选择文件。这需要我们监听FileUpload组件的onChange事件,当用户选取文件后触发相应的处理函数。在这个处理...

    GWT DEMO 增删改查

    在GWT中,可以通过选中`DataGrid`中的行来获取要修改的记录,然后弹出一个编辑对话框,利用`FormPanel`或`VerticalPanel`显示可编辑的字段。用户修改后,再次通过RPC调用更新服务器上的数据。 4. **删除(Delete)*...

    gwt 练习 gwt学习

    8. **历史管理**:GWT的History API允许应用程序创建和管理URL片段,实现页面状态的导航,而无需刷新整个页面。 9. **单元测试**:GWT提供JUnit支持,允许在浏览器环境中进行客户端代码的单元测试。 10. **CSS和...

    gwt 实现的一个简单计算器

    下面将详细介绍GWT、计算器实现的关键知识点以及如何在Eclipse环境中进行调试。 1. **GWT概述**: GWT允许开发者用Java语言编写前端应用,并自动生成优化过的JavaScript代码,使得应用可以在各种浏览器上运行。它...

    GWT

    通常,这样的设计可能涉及到如何优雅地组织GWT代码结构、实现可重用的组件或遵循特定的设计原则,如MVP(Model-View-Presenter)模式,用于分离视图逻辑和业务逻辑。 标签“源码”和“工具”表明这篇博客可能探讨了...

    Gwt 项目Demo

    GWT(Google Web Toolkit)是一个开源的Java开发框架...通过学习和实践这个“Gwt 项目Demo”,你可以掌握GWT的基本使用,包括创建用户界面、实现客户端-服务器通信、进行单元测试等技能,为进一步深入学习GWT打下基础。

Global site tag (gtag.js) - Google Analytics