GWT入门

时间:2011-02-13 16:15:40

标签: java javascript ajax gwt

我一直在研究GWT几天,我有些困惑。

我来自PHP / JSP背景,所以当我想创建一个有多个页面的网站时,我只想为每个页面创建一个PHP页面,然后让用户选择要查看的内容。

现在我正在研究GWT,我真的不明白这是怎么做到的?

让我们说我希望我的网站有三个页面(index.html,help.html,contact.html),当加载GWT应用程序时,调用onModuleLoad()方法。那么我如何编写每个单独的页面小部件,然后只使用这一个方法?

查看在Eclipse中创建的示例GWT应用程序,将创建一个HTML页面。如果只有一个onModuleLoad()方法,我将如何创建具有多个页面的应用程序?

3 个答案:

答案 0 :(得分:2)

GWT可以用于Chris Lercher和nvcleemp提到的Web 2.0,客户端应用程序方式,或者您可以将它与更传统的页面查看/重新加载模型结合使用。如果您只是想将DHTML功能注入到现有的静态页面中,您可以查找注入的特定元素ID,或者在调用onModuleLoad()时可以读取javascript嵌入式配置变量,以确定您所处的状态/模式以及您应该运行的GWT客户端功能类型。

例如,使用不同的注入点:

第1页:

<html>
<head>
...
<script type="text/javascript" src="yourmodule.nocache.js"></script>
...
</head>
<body>
...
<div id="injectMode1"></div>
...
</body>
</html>

第2页:

<html>
<head>
...
<script type="text/javascript" src="yourmodule.nocache.js"></script>
...
</head>
<body>
...
<div id="injectMode2"></div>
...
</body>
</html>

您的GWT EntryPoint:

@Override
public void onModuleLoad() {
    final Panel mode1 = RootPanel.get("injectionMode1");
    if (mode1 != null) {
        mode1.add(new ModeOneWidget());
    }
    final Panel mode2 = RootPanel.get("injectionMode2");
    if (mode2 != null) {
       mode2.add(new ModeTwoWidget());
    }
}

修改

使用javascript变量,在每个要嵌入GWT功能的页面上,您可以执行以下操作:

页面foo:

<html>
<head>
...
<script type='text/javascript'> 
    var appMode="mode1";
</script>
<script type="text/javascript" src="yourmodule.nocache.js"></script>
...
</head>
...

您的GWT EntryPoint:

private static final native String getAppMode()/*-{
    return $wnd.appMode;
}-*/;

@Override
public void onModuleLoad() {
    String appMode = getAppMode();
    if(appMode != null){
        if(appMode.equals(MODE1)){
        ...
        }
        ...
    }
}

答案 1 :(得分:0)

GWT使用JavaScript来修改页面内容。所以你不加载一个新的页面[*]。

使用GWT,您不再需要服务器来创建动态HTML内容。它是在客户端动态创建的(使用静态JavaScript代码)。当您需要从服务器加载某些内容时,只需加载数据对象(采用JSON或XML格式,或使用GWT-RPC)。然后,客户端可以使用此数据构建HTML片段(设置innerHTML)或DOM对象以修改浏览器的DOM树。

使用GWT,您不必手动构建这些代码段:您可以使用Widgets和UiBinder(客户端HTML模板,使用GWT标记和动态参数进行增强)。

[*]有一些特殊情况(例如,如果您有https登录页面,而应用程序的其余部分可能使用http),您在其中加载新页面,但这意味着您的其他页面根本不使用GWT,或者您为它创建单独的GWT模块。当然,您可以在这些模块之间共享一些Java类。

答案 2 :(得分:0)

GWT用于构建应用程序,例如谷歌阅读器或Gmail:这意味着只有“一个”页面。您可以在该页面内有一个显示联系信息的“窗口”和一个显示帮助信息的“窗口”。当用户点击相应的链接时,您会显示“窗口”