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<String, EntryPoint> registry = new HashMap<String, EntryPoint>();
- 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
以上是原作者的文章,不过想法很好,他说的这种方法我们在开发中以用过不只一次了,什么时候本人将把方法总结后写出来!
GWT中实现跳转及不同entrypoint怎么互相访问的更多相关文章
- gwt中java与js的相互调用
1. java通过jsni调用内部js Button button = new Button("java调用内部jsni的js方法"); button.addClickHandle ...
- GWT 中实现“CSS Sprite”
近段时间在弄GWT这一块,开发中遇到的一些不错的方法或者技巧,在此做个分享和记录,有不同见解可发表意见 互相切磋. 在web开发中,必然涉及到网页中的图片,本地浏览网页,要下载在服务器端的图片,然后 ...
- 在ASP.NET中各种跳转控制
在ASP.NET中各种跳转控制 分类: 我的资料2012-03-16 15:01 76人阅读 评论(0) 收藏 举报 asp.netjavascripturlmenu Respose.Write(&q ...
- 【技巧汇总】eclipse中如何跳转到指定行
技巧汇总 持续更新ing eclipse中如何跳转到指定行 ctrl+L
- 关于在ViewPager的子页面中不能跳转的问题
关于在ViewPager的子页面中不能跳转的问题 什么是ViewPager? 相信很多人使用过微信,其实微信的四个子页面:微信.通讯录.发现.我以及下面的引导空间就是ViewPager. 出现的问题: ...
- windows server 证书的颁发与IIS证书的使用 Dapper入门使用,代替你的DbSQLhelper Asp.Net MVC中Action跳转(转载)
windows server 证书的颁发与IIS证书的使用 最近工作业务要是用服务器证书验证,在这里记录下一. 1.添加服务器角色 [证书服务] 2.一路下一步直到证书服务安装完成; 3.选择圈选 ...
- 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 ...
- Vue-cli中的跳转
Vue-cli中的跳转 一.页面中跳转指定网页 写法一: <router-link :to="{name:'home'}"> 这里的name是在VUE路由里面的 写法二 ...
- HTML+JS中网页跳转的写法
1.html中使用meta中跳转,通过meta可以设置跳转时间和页面 <head> <!--只是刷新不跳转到其他页面 --> <meta http-equiv=" ...
随机推荐
- 『重构--改善既有代码的设计』读书笔记----Change Value to Reference
有时候你会认为某个对象应该是去全局唯一的,这就是引用(Reference)的概念.它代表当你在某个地点对他进行修改之后,那么所有共享他的对象都应该在再次访问他的时候得到相应的修改.而不会像值对象(Va ...
- C#程序中:如何向xml文件中写入数据和读取数据
xml文件作为外部信息存储文件使用简单,方便,其结构和表格略有相似,下面简单的说一下xml文件内容的读取 …… using System.Xml;using System.IO;namespace W ...
- JavaScript学习心得(六)
函数 对函数参数没有任何类型检查(弱类型),在必要时在函数内加上类型检查(typeof): JavaScript的函数参数无法设置默认值(可以通过检查参数,当为undefined时设置一个值 func ...
- 那些年优秀的HTML5活动页面
一个好的手机活动宣传 更能让人分享 传播是爆炸性的 下面是我平时看到一些好的微信活动宣传页面 分享给大家 其中用到的技术 常做微信活动 专题页面的人 可以看看大神们是怎么做的 这样到自己做的时候 ...
- VMware内安装Ubuntu后安装vmtools
今天处于好奇安装了Ubuntu,可是虚拟机运行的时候发现界面很小,于是百度发现要安装一个工具,看了很多方法,就这个比较实用,和大家分享: 第一步:进入系统后,点击虚拟机上的安装vmware tools ...
- dp 0-1背包问题
0-1背包的状态转换方程 f[i,j] = Max{ f[i-1,j-Wi]+Pi( j >= Wi ), f[i-1,j] } f[i,j]表示在前i件物品中选择若干件放在承重为 j 的背包 ...
- 【Itext】解决Itext5大并发大数据量下输出PDF发生内存溢出outofmemery异常
尼玛,这个问题干扰了我两个星期!! 关键字 itext5 outofmemery 内存溢出 大数据 高并发 多线程 pdf 导出 报表 itext 并发 在读<<iText in Acti ...
- 【POJ1082】Calendar Game (博弈)
[题目] Description Adam and Eve enter this year's ACM International Collegiate Programming Contest. La ...
- Android开源项目发现--- 安全篇(持续更新)
SQLCipher Sqlite加密工具 项目地址:https://github.com/sqlcipher/sqlcipher 帮助文档:http://sqlcipher.net/sqlcipher ...
- Jira在linux上安装与部署
Where should JIRA 6.0.1 be installed? [/opt/atlassian/jira] /usr/local/jira Default location for JIR ...