首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么页面无法在GWT/MVP4G中使用历史记录机制添加书签?

为什么页面无法在GWT/MVP4G中使用历史记录机制添加书签?
EN

Stack Overflow用户
提问于 2016-04-15 14:39:02
回答 1查看 55关注 0票数 0

我正在尝试使用GWT应用程序实现历史记录机制,但在页面书签方面有问题,即在我的例子中,我创建了3个页面,其中一个页面从另一个页面调用。现在的问题是,如果page3被添加了书签,那么在调用该书签时,它应该打开page3,而不是现在打开主页。为什么会这样呢?问题出在哪里?

我已经将HistoryConverter实现为

代码语言:javascript
复制
@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;
}

}

和eventBus as,

代码语言:javascript
复制
@Events(startPresenter = HistoryPageOnePresenter.class,historyOnStart=true)
public interface HistoryManagerEventBus extends EventBusWithLookup {

/**
 * Start event will be fired internally
 */
@Start
@Event(handlers = HistoryPageOnePresenter.class,historyConverter=MyHistoryConverter.class)
void start();

@InitHistory
@Event(handlers = HistoryPageOnePresenter.class)
void init();

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

@Event(handlers=HistoryPageOnePresenter.class)
void setHistoryPageTwo(HistoryPageTwoView view);

@Event(handlers=HistoryPageOnePresenter.class)
void setHistoryPageThree(HistoryPageThreeView view);
}
EN

回答 1

Stack Overflow用户

发布于 2016-04-15 16:16:51

假设:

代码语言:javascript
复制
    @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类中定义以下方法:

代码语言:javascript
复制
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#getHistoryPageTwo

myURL#getHistoryPageThree

如果您输入:

myURL#getHistoryPageThree

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

这样一切看起来都很好,除了-event不应该有historyConverter-attribute。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36639888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档