怎么跳转?
跳转这个概念这里指的是从一个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(Google Web Toolkit)中,实现一个简单的树状菜单是常见的需求,尤其是在构建具有层级结构的数据展示或导航功能的Web应用时。GWT提供了一套完整的UI组件库,其中包括Tree和TreeItem类,可以帮助我们轻松创建...
EXT-GWT的API和DOC文档对于学习和使用EXT-GWT至关重要,它们详尽地介绍了各个组件的用法和功能,帮助开发者了解如何在项目中集成和使用这些组件。 接下来,“Gwt-Ext基础-中级-进阶”这部分教程可能涵盖了从基础到...
在“gwt开发实例实现web +ajax”这个主题中,我们将深入探讨如何使用GWT技术来构建基于Web的、利用Ajax技术的交互式应用程序。 1. **GWT的核心概念** - **Java-to-JavaScript编译器**:GWT的核心特性之一是它的...
2. **本地化**:学习GWT的本地化支持,包括多语言资源文件的创建和使用,以适应不同地区的用户需求。 3. **History和HashChange**:GWT提供了History机制,用于处理浏览器地址栏的URL变化,实现无刷新的页面导航。 ...
Gwt中文手册,GWt入门Gwt中文手册,GWt入门Gwt中文手册,GWt入门
EXT-GWT2.0.1+API+DOC Gwt-Ext基础-中级-进阶GWT中文教程
7. **国际化与本地化**:GWT支持多语言应用,只需提供不同的资源包即可轻松实现。 8. **开发工具与调试**:GWT Developer Plugin是一款浏览器插件,用于在开发阶段运行和调试GWT应用,提供断点调试、代码热部署等...
在GWT(Google Web Toolkit)开发中,XMLHttpRequest(XHR)是实现客户端与服务器间异步数据交换的关键技术。GWT提供了对XHR的封装,使得开发者可以方便地使用JavaScript的XMLHttpRequest对象,而无需直接接触底层的...
- **入口点(EntryPoint)**: 每个GWT模块都有一个主类,这个类必须实现`com.google.gwt.user.client.rpc.EntryPoint`接口,并且有一个`onModuleLoad()`方法作为应用程序的启动点。 2. **开发流程**: - 使用Java...
入口点类是GWT应用的核心,它实现了`com.google.gwt.core.client.EntryPoint`接口,并包含`onModuleLoad()`方法。当GWT应用加载时,会首先执行此方法。在这里,你可以编写初始化应用逻辑,包括创建用户界面组件、...
在GWT中实现文件上传,首先需要理解的是GWT的事件处理机制,因为文件上传通常涉及到用户交互,比如点击按钮选择文件。这需要我们监听FileUpload组件的onChange事件,当用户选取文件后触发相应的处理函数。在这个处理...
在GWT中,可以通过选中`DataGrid`中的行来获取要修改的记录,然后弹出一个编辑对话框,利用`FormPanel`或`VerticalPanel`显示可编辑的字段。用户修改后,再次通过RPC调用更新服务器上的数据。 4. **删除(Delete)*...
8. **历史管理**:GWT的History API允许应用程序创建和管理URL片段,实现页面状态的导航,而无需刷新整个页面。 9. **单元测试**:GWT提供JUnit支持,允许在浏览器环境中进行客户端代码的单元测试。 10. **CSS和...
下面将详细介绍GWT、计算器实现的关键知识点以及如何在Eclipse环境中进行调试。 1. **GWT概述**: GWT允许开发者用Java语言编写前端应用,并自动生成优化过的JavaScript代码,使得应用可以在各种浏览器上运行。它...
通常,这样的设计可能涉及到如何优雅地组织GWT代码结构、实现可重用的组件或遵循特定的设计原则,如MVP(Model-View-Presenter)模式,用于分离视图逻辑和业务逻辑。 标签“源码”和“工具”表明这篇博客可能探讨了...
GWT(Google Web Toolkit)是一个开源的Java开发框架...通过学习和实践这个“Gwt 项目Demo”,你可以掌握GWT的基本使用,包括创建用户界面、实现客户端-服务器通信、进行单元测试等技能,为进一步深入学习GWT打下基础。