我有一个页面的GWT MVP应用程序。如何创建新页面并链接到它?
答案 0 :(得分:3)
如果您使用GWT谈论页面导航,这link可能会对您有所帮助。
答案 1 :(得分:1)
您可以做一件事,在同一页面上制作不同的布局,在特定的操作中,您可以隐藏一个布局并显示其他布局或组件。
答案 2 :(得分:1)
GWT通过网址fragment identifier支持应用内的网页,即http://www.yourhost.vom/main#pagename
,其中“pagename”是代表您应用内“网页”的片段标识符。
通过向主页添加iframe来启用history support:
<iframe src="javascript:''"
id="__gwt_historyFrame"
style="width:0;height:0;border:0">
</iframe>
注册ValueChangeHandler,以便在历史记录(页面)更改时收到通知。在此处理程序中,您放置了一个显示新页面的逻辑。
致电History.newItem("newpage")
答案 3 :(得分:1)
我创建了一个开源的MIT许可项目,以简化GWT中的页面导航处理。看一下GWT Views项目。
使用它,您可以使用简单的Java注释定义View(由唯一URL令牌引用的Widget)。该框架为您处理code-splitting,并隐藏所有样板代码。
以下是一个例子:
@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跟踪和用户授权。
答案 4 :(得分:0)
这就是我最终做的事情:
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
在* .gwt.xml文件中:
<entry-point class='com.example.client.Controller' />
现在,当您想要转到新页面时:
History.newItem(Login.TOKEN);