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

GWT-如何获取值并决定加载哪个页面,gwt,get,Gwt,Get,我需要知道(通过使用GWT)如何根据HTTPGET值加载某些类而不是其他类的策略 例如: // 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-s

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

例如:

// 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);
    }
}

怎么了?

要做到这一点,您应该首先添加一个servlet(而不是静态html页面)来为gwt应用程序提供服务

第一步可以是添加一个servlet,该servlet使用gwt iframe返回当前静态html页面。当然,您还需要更改web.xml

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

无论如何,如果我理解了你的问题,你想做的就是使用url显示不同的数据,为此我推荐另一种解决方案:使用#符号

使用此语法,GWT很容易显示不同的页面(在单个GWT模块中)。 http://localhost:8084/GWT/index.html#page=2 等等

在GWT文档中查找事件和历史记录。 这也是创建RESTish URL的一个很好的起点:

我认为您需要实现ValueChangeHandler,并使用History(History.addValueChangeHandler(changeHandler))

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


希望这能有所帮助:)

我相信servlet容器是根据URL选择加载哪个页面的程序。我甚至不知道这是否可行,但这取决于您使用的服务器是什么?你在用Tomcat吗?盖伊?JBoss?Tomcat:)但是GWT中的主要servlet是哪个?我想我不能直接用GWT来管理它,或者也许我不知道…嗯…我不知道我是否很了解这些文章…但我不认为这是我需要的!当我从get中获取值时,我需要加载一个新的“页面”(而不是加载我拥有的其他类)。我认为这在GWT中是可能的,对吗?事实上,我想“更改”上下文,就像旧web应用程序approch中的swith页面一样(加载plant.php而不是index.php,你知道我的意思吗?)。但我必须考虑这一点,因为也许在GWT上最好使用自己的方法:)在GWT中没有“页面”,从技术上讲,所有GWT应用程序都是一个页面,因此添加另一个页面意味着添加另一个GWT应用程序(具有不同入口点的模块)。这是我在答案的第一部分中指定的。我认为您只想更改当前页面,而不想实际离开它。要做到这一点,您只需要在页面DOM中工作。私有void loadWelcomeView(){final Label welcomeMsg=new Label(“欢迎”);welcomeMsg.addStyleName(“welcomeMsg”);RootPanel.get().clear();RootPanel.get().add(welcomeMsg);}例如,此代码将删除页面中的所有内容并替换为标签。当用户单击按钮或插入url时,您必须调用此方法(查看GWT历史记录和事件)是的,事实上我正在使用此方法。如果我需要在客户端创建所有代码并从服务器上传到客户端,或者只在需要时调用runAsyncCall方法上传代码,我不喜欢的是。否则,这是对资源的浪费,不是吗?如果您在第一次调用中不需要所有代码,您可以使用一种称为CodeSpliting的技术,它允许您仅在需要时加载代码。看,嗯……这个方法对我来说不太清楚。所以我添加了一个例子,如果你有时间和耐心,也许你可以帮助我:)谢谢你的努力!
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));
        }
    }    
}