【问题标题】:Getting Started With GWTGWT 入门
【发布时间】:2011-06-26 11:53:13
【问题描述】:

我已经研究 GWT 几天了,我有些困惑。

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

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

假设我希望我的网站有三个页面(index.html、help.html、contact.html),当加载 GWT 应用程序时会调用 onModuleLoad() 方法。然后我将如何对每个单独的页面小部件进行编码,然后仅使用这一种方法?

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

【问题讨论】:

    标签: java javascript ajax gwt


    【解决方案1】:

    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 入口点:

    @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 入口点:

    private static final native String getAppMode()/*-{
        return $wnd.appMode;
    }-*/;
    
    @Override
    public void onModuleLoad() {
        String appMode = getAppMode();
        if(appMode != null){
            if(appMode.equals(MODE1)){
            ...
            }
            ...
        }
    }
    

    【讨论】:

    • 好点。我几乎忘记了这种可能性——它可能不是最典型的 GWT 用法,但它没有任何问题,为什么不呢?
    【解决方案2】:

    GWT 使用 JavaScript 来修改页面内容。因此,您不会加载新页面 [*]。

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

    使用 GWT,您不必手动构建这些 sn-ps:您可以使用 Widgets 和 UiBinder(客户端 HTML 模板,使用 GWT 标签和动态参数增强)。

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-15
        • 2010-09-21
        • 1970-01-01
        • 1970-01-01
        • 2013-05-06
        • 2018-10-21
        • 2011-08-20
        • 2010-11-06
        相关资源
        最近更新 更多