怎么跳转? 
跳转这个概念这里指的是从一个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看起来如下:

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. <html>
  3. <head>
  4. <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  5. <!--                                                               -->
  6. <!-- Consider inlining CSS to reduce the number of requested files -->
  7. <!--                                                               -->
  8. <link type="text/css" rel="stylesheet" href="Gwtapp.css">
  9. <!--                                           -->
  10. <!-- Any title is fine                         -->
  11. <!--                                           -->
  12. <title>Web Application Starter Project</title>
  13. <!--                                           -->
  14. <!-- This script loads your compiled module.   -->
  15. <!-- If you add any GWT meta tags, they must   -->
  16. <!-- be added before this line.                -->
  17. <!--                                           -->
  18. <script type="text/javascript" language="javascript" src="gwtapp/gwtapp.nocache.js"></script>
  19. </head>
  20. <!--                                           -->
  21. <!-- The body can have arbitrary html, or      -->
  22. <!-- you can leave the body empty if you want  -->
  23. <!-- to create a completely dynamic UI.        -->
  24. <!--                                           -->
  25. <body>
  26. <!-- OPTIONAL: include this if you want history support -->
  27. <iframe src="javascript:''" id="__gwt_historyFrame" tabIndex='-1' style="position:absolute;width:0;height:0;border:0"></iframe>
  28. </body>
  29. </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不就可以了吗

例如

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

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都在这个类上面注册,其它地方使用的时候再从这个注册类里面取得,这是可行的:

  1. public class Register {
  2. private static Map&lt;String, EntryPoint&gt; registry = new HashMap&lt;String, EntryPoint&gt;();
  3. public static void register(String name,EntryPoint entry){
  4. registry.put(name, entry);
  5. }
  6. public static EntryPoint getEntryPoint(String name){
  7. return registry.get(name);
  8. }
  9. }
  10. public void onModuleLoad() {
  11. Register.register("CreditrightStatisitcs", this);
  12. .....................
  13. public void onModuleLoad() {
  14. Register.register("CreditrightListModule", this);
  15. com.google.gwt.user.client.Window.alert("in java:"+((CreditrightStatisitcs)Register.getEntryPoint("CreditrightStatisitcs")).test());

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

以上是原作者的文章,不过想法很好,他说的这种方法我们在开发中以用过不只一次了,什么时候本人将把方法总结后写出来!

GWT中实现跳转及不同entrypoint怎么互相访问的更多相关文章

  1. gwt中java与js的相互调用

    1. java通过jsni调用内部js Button button = new Button("java调用内部jsni的js方法"); button.addClickHandle ...

  2. GWT 中实现“CSS Sprite”

    近段时间在弄GWT这一块,开发中遇到的一些不错的方法或者技巧,在此做个分享和记录,有不同见解可发表意见  互相切磋. 在web开发中,必然涉及到网页中的图片,本地浏览网页,要下载在服务器端的图片,然后 ...

  3. 在ASP.NET中各种跳转控制

    在ASP.NET中各种跳转控制 分类: 我的资料2012-03-16 15:01 76人阅读 评论(0) 收藏 举报 asp.netjavascripturlmenu Respose.Write(&q ...

  4. 【技巧汇总】eclipse中如何跳转到指定行

    技巧汇总 持续更新ing eclipse中如何跳转到指定行 ctrl+L

  5. 关于在ViewPager的子页面中不能跳转的问题

    关于在ViewPager的子页面中不能跳转的问题 什么是ViewPager? 相信很多人使用过微信,其实微信的四个子页面:微信.通讯录.发现.我以及下面的引导空间就是ViewPager. 出现的问题: ...

  6. windows server 证书的颁发与IIS证书的使用 Dapper入门使用,代替你的DbSQLhelper Asp.Net MVC中Action跳转(转载)

    windows server 证书的颁发与IIS证书的使用   最近工作业务要是用服务器证书验证,在这里记录下一. 1.添加服务器角色 [证书服务] 2.一路下一步直到证书服务安装完成; 3.选择圈选 ...

  7. C# MVC 用户登录状态判断 【C#】list 去重(转载) js 日期格式转换(转载) C#日期转换(转载) Nullable<System.DateTime>日期格式转换 (转载) Asp.Net MVC中Action跳转(转载)

    C# MVC 用户登录状态判断   来源:https://www.cnblogs.com/cherryzhou/p/4978342.html 在Filters文件夹下添加一个类Authenticati ...

  8. Vue-cli中的跳转

    Vue-cli中的跳转 一.页面中跳转指定网页 写法一: <router-link :to="{name:'home'}"> 这里的name是在VUE路由里面的 写法二 ...

  9. HTML+JS中网页跳转的写法

    1.html中使用meta中跳转,通过meta可以设置跳转时间和页面 <head> <!--只是刷新不跳转到其他页面 --> <meta http-equiv=" ...

随机推荐

  1. js跳转页面方法

      <span id="tiao">3</span><a href="javascript:countDown"></ ...

  2. InfoPath本地发布及部署

    前言 最近在接触SharePoint项目,第一次接触,总感觉有些不适应.以前只是听过,现在要遇见了,有些小紧张.今天改了一下表单的东西,也是对sharepoint的慢慢熟悉过程,分享给初学,或者未学者 ...

  3. 一个简单的webservice调用

    我们先创建一个简单空web应用程序 然后添加新建项目 //我们创建一个peson对象,产生数据标识返回 using System; using System.Collections.Generic; ...

  4. Linux内核监控模块-3-系统调用的截获

    上一章,我们获取了系统调用表的地址,这里我们来搞点所谓“截获”的事情.所谓“截获”即是将系统调用表里的地址指向我们自己写的一个函数,系统调用先执行我们自己写的函数,处理完后,再返回原来系统调用的执行函 ...

  5. [BZOJ 1029] [JSOI2007] 建筑抢修 【贪心】

    题目链接:BZOJ - 1029 题目分析 使用一种贪心策略. 现将任务按照deadline从小到大排序. 然后枚举每一个任务,如果当前消耗的时间加上完成这个任务的时间不会超过这个任务的deadlin ...

  6. dispatch_semaphore

    dispatch_semaphore 信号量基于计数器的一种多线程同步机制.在多个线程访问共有资源时候,会因为多线程的特性而引发数据出错的问题. dispatch_queue_t queue = di ...

  7. MYSQLl防注入

    1.简单sql防注入 简述: 所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令. 在某些表单中,用户输入的内容直接用来构造(或 ...

  8. C++ Prime:switch内部的变量定义

    如果需要为某个case分支定义并初始化一个变量,我们应该把变量定义在块内,从而确保后面的所有case标签都在变量的作用域之外. case true: { // 正确,声明语句位于语句块内部 strin ...

  9. 在.net MVC中异步上传图片或者文件

      @using (Ajax.BeginForm("AddMessages", "MenuInfo", new AjaxOptions { HttpMethod ...

  10. 成为Web开发人员的7个简单步骤

    你想成为一名 Web 开发人员,但现在你面前有这样一个问题,那就是你没有在高科技行业工作的经验.你上了一些课程,也花了时间在个人编码项目上,但是你的简历上关于“经验”的部分仍然不为企业承认.过渡到一个 ...