On reload of page, mvp4g history mechanism fails

67 Views Asked by At

I have implemented a history mechanism for my mvp4g project. When I traverse through the pages, I can see the url also getting changed. But on reload of any page other than home page, always home page gets displayed instead of the desired page?

This is my implementation:

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

    private CustomEventBus eventBus;

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

    public String convertToToken(String eventName, String name) {
        return name;
    }

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

    public String convertToToken(String eventName, String name, String type) {
        return name;
    }

    public boolean isCrawlable() {
        return false;
    }
}

and event bus related code :

    @Events(startPresenter=PageOnePresenter.class,historyOnStart=true)
public interface CustomEventBus extends EventBusWithLookup {

    @Start
    @Event(handlers = PageOnePresenter.class)
    void start();

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

    @Event(handlers = PageTwoPresenter.class, name = "page2", historyConverter = CustomHistoryConverter.class)
    void getPageTwo();

    @Event(handlers = PageThreePresenter.class, name = "page3", historyConverter=CustomHistoryConverter.class)
    void getPageThree();

    @Event(handlers=PageOnePresenter.class, name = "page1", historyConverter=CustomHistoryConverter.class)
    void getPageOne();

    @Event(handlers=PageOnePresenter.class)
    void setPageTwo(HistoryPageTwoView view);

    @Event(handlers=PageOnePresenter.class)
    void setPageThree(HistoryPageThreeView view);
 }
1

There are 1 best solutions below

1
El Hoss On

The HistoryConverter needs to be improved.

In fact, that the event has no parameter, you should return an empty string. Update the HistoryConverter that it looks like that:

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

    private CustomEventBus eventBus;

    @Override
    public void convertFromToken(String historyName, String param, CustomEventBus eventBus) {
        this.eventBus = eventBus;
        // TODO handle the param in cases where you have more than one parameter
        eventBus.dispatch(historyName, param);
    }

    public String convertToToken(String eventName, String name) {
        return name;
    }

    public String convertToToken(String eventName) {
        return "";
    }

    public String convertToToken(String eventName, String name, String type) {
        return name - "-!-" type;
    }

    public boolean isCrawlable() {
        return false;
    }
}

Hope that helps.