【发布时间】:2011-05-13 02:00:09
【问题描述】:
我需要知道(通过使用 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);
}
}
如果我的GET 是@987654321@,我想加载MainHomePage();
否则,如果我的GET 是@987654322@,我想加载MainAnotherClass();
我需要在 PageLoader 类、XML 或哪里实现它?我想在xml上,因为PageLoader是一个客户端类……这里没办法做决定。
附:我想加载另一个页面(别名,另一个主类),而不是动态加载它。
我尝试过的示例
感谢this 的Chris Boesing 解决方案,我找到了一段简单的代码,可以满足我的需要。不幸的是,有些东西是错误的,因为它调用了.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));
}
}
}
怎么了?
【问题讨论】:
-
我相信servlet容器是根据URL选择加载哪个页面的程序。我什至不知道这是否可能,但这取决于您使用的服务器?你在用Tomcat吗?盖伊?老板?
-
Tomcat :) 但是哪个是 GWT 中的主要 servlet?我想我不能直接用 GWT 管理它,或者我不知道......