0

我正在尝试使用 GWT 应用程序实现历史机制,但页面书签存在问题,即在我的情况下,我创建了 3 个页面,其中一个页面被另一个页面调用。现在,问题是如果 page3 被添加了书签,那么在调用该书签时它应该打开 page3 而不是现在它打开主页。为什么会这样。?可能是什么问题。?

我已将 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;
}

}

和 eventBus 作为,

@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);
}
4

1 回答 1

0

假如说:

    @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]#getHistoryPageTwo

或者

[myURL]#getHistoryPageThree

如果您输入:

[myURL]#getHistoryPageThree

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

所以一切看起来都不错,除了 Start-event 不应该有 historyConverter-attribute 的事实。

于 2016-04-15T08:16:51.487 回答