我有一个更大的应用程序,我正在使用但GWT History documentation有一个简单的例子来演示这个问题。为方便起见,复制了该示例:
public class HistoryTest implements EntryPoint, ValueChangeHandler
{
private Label lbl = new Label();
public void onModuleLoad()
{
Hyperlink link0 = new Hyperlink("link to foo", "foo");
Hyperlink link1 = new Hyperlink("link to bar", "bar");
Hyperlink link2 = new Hyperlink("link to baz", "baz");
String initToken = History.getToken();
if (initToken.length() == 0)
{
History.newItem("baz");
}
// Add widgets to the root panel.
VerticalPanel panel = new VerticalPanel();
panel.add(lbl);
panel.add(link0);
panel.add(link1);
panel.add(link2);
RootPanel.get().add(panel);
History.addValueChangeHandler(this); // Add history listener
History.fireCurrentHistoryState();
}
@Override
public void onValueChange(ValueChangeEvent event)
{
lbl.setText("The current history token is: " + event.getValue());
}
}
问题在于,如果刷新应用程序,历史堆栈就会被吹走。如何保留历史记录,以便在用户刷新页面时,后退按钮仍然有用?
答案 0 :(得分:2)
我刚刚使用Firefox和Chrome对我的应用程序进行了测试,并且页面刷新不清除历史记录。你使用哪种浏览器?你有
吗?<iframe src="javascript:''" id='__gwt_historyFrame' style='position:absolute;width:0;height:0;border:0'></iframe>
你的HTML中有吗?
答案 1 :(得分:1)
GWT通过提供History对象来满足此问题。通过调用它的静态方法History.newItem("your token")
,您就可以将一个标记传递给查询字符串。
但是,您需要注意,只要gwt应用程序中发生历史记录更改,就会触发onValueChange(ValueChangeEvent event){}
事件,并且您可以在该方法中调用相应的页面。以下是我用来解决此问题的步骤列表。
向需要调用新页面的对象添加单击侦听器。在处理事件时,请向history.(History.newItem("new_token")
添加一个令牌。
在实现EntryPoint的类中实现ValueChangeHandler
。
将onValueChangeHandler(this)
侦听器添加到实现EntryPoint的类中。确保在实现EntryPoint的类的onModuleLoad()
方法(在此方法中添加它很重要)中添加该行(非常明显哈哈!)
最后实施onValueChange(ValueChangeEvent event)
{//调用新页面}方法。
就是这样