GWT - 如何获取值并决定加载哪个页面

时间:2010-11-20 13:07:39

标签: gwt get

我需要知道(通过使用GWT)如何根据HTTP GET值加载某些类而不是其他类的策略。

示例:

// Main.gwt.xml
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 1.7.0//EN" "http://google-web-toolkit.googlecode.com/svn/tags/1.7.0/distro-source/core/src/gwt-module.dtd">

<module>
    <inherits name="com.google.gwt.user.User"/>
    <entry-point class="org.sinfonet.client.PageLoader"/>
</module>

// PageLoader
package org.sinfonet.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.RootPanel;

public class PageLoader implements EntryPoint {
    public void onModuleLoad() {
        FlowPanel pageloader=new FlowPanel();
        pageloader.add(new MainHomePage());
        RootPanel.get().add(pageloader);
    }
}

如果我的GEThttp://localhost:8084/GWT/index.html,我想加载MainHomePage();

否则,如果我的GEThttp://localhost:8084/GWT/index.html?page=2,我想加载MainAnotherClass();

我需要在PageLoader类,XML或其他地方实现它吗?我认为在xml上,因为PageLoader是一个客户端类......没有办法在这里做出决定。

P.S。我想加载另一个页面(别名,另一个主类),而不是加载它。

示例I TRIED

感谢Chris Boesing this解决方案,我找到了一条简单的代码,可以满足我的需求。不幸的是,有些事情是错误的,因为它调用.clear()方法,但它不会附加我的新容器。这就是代码:

public class PageLoader implements EntryPoint, ValueChangeHandler<String> {
    private FlowPanel pageloader;
    private GWTServiceAsync rpcService;

    public void onModuleLoad() {
        pageloader=new FlowPanel();
        rpcService=GWT.create(GWTService.class);
        pageloader.add(new HomepageContext(rpcService));
        RootPanel.get().add(pageloader);

        History.addValueChangeHandler(this);
        if(!History.getToken().isEmpty()){
            changePage(History.getToken());
        }
    }

    public void onValueChange(ValueChangeEvent event) {
        changePage(History.getToken());
    }

    public void changePage(String token) {
        if(History.getToken().equals("apartment")) {
            pageloader.clear();
            pageloader.add(new ApartmentContext(rpcService));
        } else {
            pageloader.clear();
            pageloader.add(new HomepageContext(rpcService));
        }
    }    
}

怎么了?

2 个答案:

答案 0 :(得分:3)

我想你会想要实现一个ValueChangeHandler&lt;字符串&gt; ,并使用History(History.addValueChangeHandler(changeHandler)。

然后,在valuechangehandler实现上,您可以获取所请求的令牌并选择要显示的视图。

希望这有助于:)

答案 1 :(得分:2)

为此,您应首先添加一个servlet(而不是静态html页面)来为您的gwt应用程序提供服务。

第一步可能只是添加一个servlet,它返回带有gwt iframe的当前静态html页面。当然,您还需要更改web.xml。

第二步是根据url更改返回的html以显示一个gwt模块或另一个。 如果您想根据网址显示2个不同的gwt应用程序(也称为模块),这是唯一的解决方案。

无论如何,如果我理解你的问题,你想要做的只是使用网址显示不同的数据,因为我推荐另一个解决方案:使用#符号。

使用此语法,GWT可以非常轻松地显示不同的页面(在单个GWT模块中)。 http://localhost:8084/GWT/index.html HTTP://本地主机:8084 / GWT / index.html中#页= 2 http://localhost:8084/GWT/index.html#searchFor=foo

在GWT文档中查找事件和历史记录。 这也是拥有RESTish网址的一个非常好的起点: http://code.google.com/webtoolkit/articles/mvp-architecture.html