简体   繁体   中英

Why page cannot get bookmarked with History mechanism in GWT/MVP4G.?

I am trying to implement history mechanism with a GWT app but has problem with page bookmark ie in my case, I have created 3 pages where one get invoked from another. Now, the problem is if page3 is bookmarked then while invoking that bookmark it should open page3 instead now it opens Home page. Why is it so.? What can be the issue.?

I have implemented HistoryConverter as,

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

}

and eventBus as,

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

Assuming that:

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

are your navigation events, there is no need to have the following methods inside the MyHistoryConverter class defined:

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

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

as they are not called to create history tokens.

If your history converter works, you should see something like that in your URL:

[myURL]#getHistoryPageOne

or

[myURL]#getHistoryPageTwo

or

[myURL]#getHistoryPageThree

If you entering:

[myURL]#getHistoryPageThree

to start your application, the tokens will be handle in the convertFromToken-method. You can add the @Debug-annotation to your eventBus to verify that the bookmarked event is fired at the start of your application.

So everything looks good, except the fact, that the Start-event should not have a historyConverter-attribute.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM