如何重建GWT历史堆栈?

如何重建GWT历史堆栈?,gwt,gwt-history,Gwt,Gwt History,我正在使用一个更大的应用程序,但有一个简单的示例演示了这个问题。为了方便起见,复制了以下示例: public class HistoryTest implements EntryPoint, ValueChangeHandler { private Label lbl = new Label(); public void onModuleLoad() { Hyperlink link0 = new Hyperlink("link to foo", "fo

我正在使用一个更大的应用程序,但有一个简单的示例演示了这个问题。为了方便起见,复制了以下示例:

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

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

我刚刚用Firefox和Chrome对我的应用程序进行了测试,页面刷新不会清除历史记录。你使用哪种浏览器?你有电话号码吗

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


在你的HTML中?

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

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


在HTML中?

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

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

  • 向需要调用新页面的对象添加单击侦听器。在处理事件时,将令牌添加到
    历史记录中。(history.newItem(“新令牌”)

  • 在实现入口点的类中实现
    ValueChangeHandler

  • onValueChangeHandler(this)
    listener添加到实现入口点的类中。确保该行是在实现入口点的类的
    onModuleLoad()
    方法中添加的(重要的是在该方法中添加该行)(非常明显!)

  • 最后实现
    onValueChange(ValueChangeEvent事件)
    {//callanewpage}方法


  • 也就是说,GWT通过提供历史对象解决了这个问题。通过调用它的静态方法
    History.newItem(“您的令牌”)
    ,您将能够将令牌传递到查询字符串中

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

  • 向需要调用新页面的对象添加单击侦听器。在处理事件时,向
    历史记录添加一个标记。(history.newItem(“new_token”)

  • 在实现入口点的类中实现
    ValueChangeHandler

  • onValueChangeHandler(this)
    listener添加到实现入口点的类中。确保该行是在实现入口点的类的
    onModuleLoad()
    方法中添加的(重要的是在该方法中添加该行)(非常明显!)

  • 最后实现
    onValueChange(ValueChangeEvent事件)
    {//callanewpage}方法


  • 就是这样

    是的,历史框架已经准备好了。事实证明,这不是我能控制的技术问题,我现在问这个问题觉得很傻。有几件事在起作用。首先,GWT浏览器在刷新时会丢失历史记录(有时我忘了编译).第二,IE在历史记录方面表现得很奇怪。第三,一些开发人员没有正确地将历史标记推到堆栈上。感谢您为我查看此内容,抱歉给我带来麻烦。是的,历史框架已经就位。事实证明,这不是我控制下的一个技术问题,我现在问这个问题感到很愚蠢。有几个没有hings在起作用。首先,GWT浏览器在刷新时会丢失历史记录(有时我会忘记编译)。第二,IE在历史记录方面的行为异常。第三,一些开发人员没有正确地将历史标记推到堆栈上。感谢您帮我看一下,很抱歉给您添麻烦。