GWTP, как передать объект PlaceManager для просмотра?

У меня есть представление, которое связывается с сервером для загрузки и скачивания файла.

Я добавил EventHandler для несанкционированного ответа с сервера в свое представление.

Теперь я хотел бы перенаправить пользователя на страницу входа:

PlaceManager pm;
PlaceRequest placeRequest = new PlaceRequest.Builder(pm.getCurrentPlaceRequest()).nameToken(Routing.Url.login).build();
pm.revealPlace(placeRequest);
MaterialToast.fireToast("You session has expired.");

но для этого мне нужен объект PlaceManager. Как я могу внедрить его в свое представление?

Я использую GWT 2.7 и GWTP


person masterdany88    schedule 07.06.2016    source источник
comment
Ваш докладчик должен взаимодействовать с вашим сервером, а ваше представление — с докладчиком.   -  person El Hoss    schedule 07.06.2016


Ответы (1)


Во-первых, у вас не должно быть такой логики в представлении. Вместо этого вы должны создать

public interface YourViewUiHandlers extends UiHandlers{ 
    void navigate();
}

Затем измените интерфейс MyView, чтобы реализовать HasUiHandlers<YourViewUiHandlers>, а в ViewImpl замените extends ViewImpl на extends ViewWithUiHandlers<YourViewUiHandlers >.

Теперь в вашем представлении вы сможете вызывать своего докладчика следующим образом:

getUiHandlers().navigate();

Конечно, ваш ведущий должен

  1. Реализуйте YourViewUiHandlers
  2. В его конструкторе сделайте что-то вроде view.setUiHandlers(this);

PlaceManager можно просто внедрить в Presenter с аннотацией @Inject. На самом деле, если вы хотите сделать его плохим и грязным, @Inject сделает это и для представления. А если это не View, а просто какой-то композит - Инициализируйте его с помощью GIN, используя @UiField (при условии = true), а затем просто введите его в конструктор/установите поле перед initWidget();

person Роман Гуйван    schedule 07.06.2016