Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么在GWT/MVP4G中无法使用历史记录机制对页面进行书签。?_Java_Gwt_Browser History_Gwt Mvp_Mvp4g - Fatal编程技术网

Java 为什么在GWT/MVP4G中无法使用历史记录机制对页面进行书签。?

Java 为什么在GWT/MVP4G中无法使用历史记录机制对页面进行书签。?,java,gwt,browser-history,gwt-mvp,mvp4g,Java,Gwt,Browser History,Gwt Mvp,Mvp4g,我试图用GWT应用程序实现历史记录机制,但页面书签有问题,即在我的例子中,我创建了3个页面,其中一个页面从另一个页面调用。现在的问题是,如果第3页是书签,那么在调用书签时,它应该打开第3页,而不是现在打开主页。 为什么是这样。?有什么问题吗 我已将HistoryConverter实现为 @History(type=HistoryConverterType.SIMPLE) public class MyHistoryConverter implements HistoryConverter<

我试图用GWT应用程序实现历史记录机制,但页面书签有问题,即在我的例子中,我创建了3个页面,其中一个页面从另一个页面调用。现在的问题是,如果第3页是书签,那么在调用书签时,它应该打开第3页,而不是现在打开主页。 为什么是这样。?有什么问题吗

我已将HistoryConverter实现为

@History(type=HistoryConverterType.SIMPLE)
public class MyHistoryConverter implements HistoryConverter<HistoryManagerEventBus> {

public MyHistoryConverter() {

}

@Override
public void convertFromToken(String historyName, String param,HistoryManagerEventBus eventBus) {
    eventBus.dispatch(historyName);     
}

public String convertToToken(String eventType){ 
   return eventType;
}

public String convertToToken(String eventType,HistoryPageTwoView view){    
    return view.getClass().getName();
}

public String convertToToken(String eventType,HistoryPageThreeView view){    
    return view.getClass().getName();
}

@Override
public boolean isCrawlable() {
    return false;
}

}
假设:

    @Event(handlers = HistoryPageTwoPresenter.class,historyConverter=MyHistoryConverter.class)
    void getHistoryPageTwo();

    @Event(handlers=HistoryPageThreePresenter.class,historyConverter=MyHistoryConverter.class)
    void getHistoryPageThree();

    @Event(handlers=HistoryPageOnePresenter.class,historyConverter=MyHistoryConverter.class)
    void getHistoryPageOne();
如果是导航事件,则无需在MyHistoryConverter类中定义以下方法:

public String convertToToken(String eventType,HistoryPageTwoView view){    
    return view.getClass().getName();
}

public String convertToToken(String eventType,HistoryPageThreeView view){    
    return view.getClass().getName();
}
因为它们不是用来创建历史标记的

如果您的历史转换器工作正常,您应该在URL中看到类似的内容:

[myURL]#getHistoryPageOne

[myURL]#获取历史页面二

[myURL]#获取历史页面三

如果您输入:

[myURL]#获取历史页面三

要启动应用程序,令牌将在convertFromToken方法中处理。 您可以将添加到eventBus以验证书签事件是否在应用程序启动时触发


因此,除了启动事件不应具有historyConverter属性这一事实之外,其他一切看起来都很好。

EI Hoss:从启动事件中删除historyConverter属性后,即使我没有添加@Debug注释,它仍然有效,在这种情况下,如果我转到第3页,并按下后退按钮两次,它应该转到第1页,这是不发生的。若我们将historyConverter属性添加到启动事件,它将进入第1页,但书签在这种情况下不起作用。您能解释一下这个场景吗?@Debug注释显示了有关触发和使用事件的信息。不多了。你把后退按钮按两次是什么意思。您应该看到上面发布的URL。如果您看到的是其他URL,那么您也可以将历史转换器用于其他事件。是吗?我的意思是,当我在第3页时,Url是[demoHistoryManager.html#getHistoryPageThree?getHistoryPageThree]。现在,如果我按下浏览器后退按钮,url显示为[demoHistoryManager.html#getHistoryPageTwo?getHistoryPageTwo],也就是说,它进入第二页,但如果我再次按下浏览器后退按钮,它应该进入第一页,url应该是[demoHistoryManager.html#getHistoryPageOne?getHistoryPageOne],但事实并非如此。在我的例子中,它保留在第二个页面上,url是[demoHistoryManager.html],历史将只返回到您以前访问过的页面。
public String convertToToken(String eventType,HistoryPageTwoView view){    
    return view.getClass().getName();
}

public String convertToToken(String eventType,HistoryPageThreeView view){    
    return view.getClass().getName();
}