Java 为什么在GWT/MVP4G中无法使用历史记录机制对页面进行书签。?
我试图用GWT应用程序实现历史记录机制,但页面书签有问题,即在我的例子中,我创建了3个页面,其中一个页面从另一个页面调用。现在的问题是,如果第3页是书签,那么在调用书签时,它应该打开第3页,而不是现在打开主页。 为什么是这样。?有什么问题吗 我已将HistoryConverter实现为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<
@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();
}