你如何重建GWT History堆栈?

时间:2009-06-19 20:30:14

标签: gwt gwt-history

我有一个更大的应用程序,我正在使用但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());
    }
}

问题在于,如果刷新应用程序,历史堆栈就会被吹走。如何保留历史记录,以便在用户刷新页面时,后退按钮仍然有用?

2 个答案:

答案 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){}事件,并且您可以在该方法中调用相应的页面。以下是我用来解决此问题的步骤列表。

  1. 向需要调用新页面的对象添加单击侦听器。在处理事件时,请向history.(History.newItem("new_token")添加一个令牌。

  2. 在实现EntryPoint的类中实现ValueChangeHandler

  3. onValueChangeHandler(this)侦听器添加到实现EntryPoint的类中。确保在实现EntryPoint的类的onModuleLoad()方法(在此方法中添加它很重要)中添加该行(非常明显哈哈!)

  4. 最后实施onValueChange(ValueChangeEvent event) {//调用新页面}方法。

  5. 就是这样