0

我正在使用一个更大的应用程序,但GWT History 文档有一个简单的示例来演示该问题。为方便起见,复制了示例:

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());
    }
}

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

4

2 回答 2

2

我刚刚用 Firefox 和 Chrome 对我的应用程序进行了测试,页面刷新并没有清除历史记录。您使用哪种浏览器?你有没有

<iframe src="javascript:''" id='__gwt_historyFrame' style='position:absolute;width:0;height:0;border:0'></iframe>

在你的 HTML 中?

于 2009-06-21T10:30:04.180 回答
1

GWT 通过提供 History 对象解决了这个问题。通过调用它的静态方法History.newItem("your token"),您将能够将令牌传递到您的查询字符串中。

但是,您需要注意,只要 gwt 应用程序中的历史记录发生更改,onValueChange(ValueChangeEvent event){}就会触发该事件,并且您可以在该方法中调用相应的页面。以下是我用来解决此问题的步骤列表。

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

  2. 在实现ValueChangeHandler您的入口点的类中实现。

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

  4. 最后实现onValueChange(ValueChangeEvent event){ //call a new page } 方法。

就是这样

于 2010-10-02T19:45:45.290 回答