Почему страница не может быть добавлена ​​в закладки с помощью механизма истории в GWT/MVP4G?

Я пытаюсь реализовать механизм истории с приложением GWT, но у меня проблема с закладкой страницы, т.е. в моем случае я создал 3 страницы, где одна вызывается из другой. Теперь проблема в том, что если страница 3 добавлена ​​в закладки, то при вызове этой закладки она должна открывать страницу 3, а теперь открывает домашнюю страницу. Почему это так.? В чем может быть дело.?

Я реализовал 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);
}

person Pratik Rawlekar    schedule 15.04.2016    source источник


Ответы (1)


При условии, что:

    @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

or

[myURL]#getHistoryPageTwo

or

[myURL]#getHistoryPageThree

Если вы вводите:

[myURL]#getHistoryPageThree

чтобы запустить ваше приложение, токены будут обрабатываться в методе convertFromToken. Вы можете добавить @Debug-annotation в свой eventBus, чтобы убедитесь, что событие с закладкой запускается в начале вашего приложения.

Так что все выглядит хорошо, за исключением того факта, что событие Start не должно иметь атрибута historyConverter.

person El Hoss    schedule 15.04.2016
comment
Э. И. Хосс: Это сработало после удаления атрибута historyConverter из начального события, даже если я не добавляю аннотацию @Debug, но в этом случае, если я перехожу на страницу 3 и дважды нажимаю кнопку «Назад», я должен перейти на страницу 1, чего не происходит. . Если мы добавим атрибут historyConverter для запуска события, он попадет на страницу1, но закладка в этом случае не работает. Не могли бы вы объяснить сценарий.? - person Pratik Rawlekar; 15.04.2016
comment
Аннотация @Debug показывает информацию об активации и использовании событий. не более. - person El Hoss; 15.04.2016
comment
Что вы имеете в виду, когда дважды нажимаете кнопку «Назад». Вы должны увидеть URL-адреса, опубликованные выше. Если вы видите URL-адреса, отличные от этого, вы используете преобразователь истории и для других событий. Ты? - person El Hoss; 15.04.2016
comment
Я имею в виду, что когда я был на странице 3, URL-адрес был [demoHistoryManager.html#getHistoryPageThree?getHistoryPageThree]. Теперь, если я нажимаю кнопку «Назад» в браузере, URL-адрес отображается как [demoHistoryManager.html#getHistoryPageTwo?getHistoryPageTwo], то есть он переходит на вторую страницу, но если я снова нажимаю кнопку «Назад» в браузере, он должен перейти на первую страницу, а URL-адрес должен быть [demoHistoryManager.html# getHistoryPageOne?getHistoryPageOne], что не так. В моем случае он остается на второй странице, а URL-адрес [demoHistoryManager.html] - person Pratik Rawlekar; 15.04.2016
comment
История будет возвращаться только к страницам, которые вы уже посещали ранее. - person El Hoss; 15.04.2016
comment
да, вы правы, но я зашел на первую страницу и все равно не возвращаюсь на эту страницу. - person Pratik Rawlekar; 15.04.2016
comment
Если вы посетили страницу 1 и URL-адрес был создан, вы можете вернуться на эту страницу. - person El Hoss; 15.04.2016