Java 吕震中本:如何创建新页面
我有一个一页的GWT MVP应用程序。如何创建新页面并链接到该页面?您可以做一件事,在同一页面上制作不同的布局,在特定操作中,您可以隐藏一个布局并显示其他布局或组件。GWT支持通过URL在应用程序内创建页面,即Java 吕震中本:如何创建新页面,java,gwt,Java,Gwt,我有一个一页的GWT MVP应用程序。如何创建新页面并链接到该页面?您可以做一件事,在同一页面上制作不同的布局,在特定操作中,您可以隐藏一个布局并显示其他布局或组件。GWT支持通过URL在应用程序内创建页面,即http://www.yourhost.vom/main#pagename,其中“pagename”是表示应用程序中“页面”的片段标识符 通过向主机页添加iframe启用: <iframe src="javascript:''" id="__gwt_historyF
http://www.yourhost.vom/main#pagename
,其中“pagename”是表示应用程序中“页面”的片段标识符
<iframe src="javascript:''"
id="__gwt_historyFrame"
style="width:0;height:0;border:0">
</iframe>
History.newItem(“newpage”)
这就是我最后做的:
package com.example.client;
import java.util.logging.Logger;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.user.client.History;
import com.google.gwt.user.client.ui.RootPanel;
public class Controller implements EntryPoint {
private static Controller instance;
private static final Logger log = Logger.getLogger(Controller.class.getName());
// I have a feeling GWT does not respect private constructors, or else it uses some other voodoo.
private Controller(){}
public static Controller getInstance() {
if (instance == null) instance = new Controller();
return instance;
}
@Override
public void onModuleLoad() {
String token = History.getToken();
log.info("****************************** token:"+token);
History.addValueChangeHandler(new ValueChangeHandler<String>() {
@Override
public void onValueChange(ValueChangeEvent<String> event) {
navigate(event.getValue());
} // onValueChange
});
if (token == null || token.length() == 0) History.newItem(Login.TOKEN); // no token
else navigate(token); // restore app state
}
private static void navigate(String token) {
RootPanel rootPanel = RootPanel.get("gwtApp");
if (rootPanel.getWidgetCount() > 0) rootPanel.remove(0); // clear the page
if (Login.TOKEN.equals(token)) {
Login page = Login.getInstance();
page.onModuleLoad();
} else if (MainApp.TOKEN.equals(token)) {
MainApp page = MainApp.getInstance();
page.onModuleLoad(); // display the page
// page.setAuthenticated(true);
// page.setUsername(email);
}
}
} // Controller
我创建了一个开放源码、MIT许可的项目,以简化GWT中的页面导航处理。看看这个项目 使用它,您可以使用简单的Java注释定义视图(由唯一URL标记引用的小部件)。该框架为您提供服务,并隐藏所有样板代码 以下是一个例子:
@View(Login.TOKEN)
public class Login extends Composite {
//... your code, you can use UIBinder, procedural UI, whatever you like
使用History.newItem(Login.TOKEN)
时,页面上将呈现Login
小部件
框架还处理了许多常见的用例,例如ViewContainers、404页面、Google Analytics tracking和用户授权。无论您想在哪里开始监听页面更改,通常是在应用程序启动时(例如,在您的
onModuleLoad()中)
)
History.newItem(Login.TOKEN);
@View(Login.TOKEN)
public class Login extends Composite {
//... your code, you can use UIBinder, procedural UI, whatever you like