PlaceRequest с параметрами для Popup Presenter

Я пытаюсь передать параметр в запросе места презентеру, который будет всплывающим окном, но я получаю пустые параметры во всплывающем презентере... я ничего не забыл?

ДобавитьProjetoPresenter

public class AddProjetoPresenter extends Presenter<AddProjetoPresenter.AddProjetoView, AddProjetoPresenter.AddProjetoProxy>
    {
    @ProxyCodeSplit
    @NameToken(NameTokens.addproj)
    public interface AddProjetoProxy extends ProxyPlace<AddProjetoPresenter>
    {
    }

    public interface AddProjetoView extends View
    {
        HasValue<String> getNome();

        HasValue<Date> getDtInicio();

        HasValue<Date> getDtFim();

        HasClickHandlers getAddRequisitos();

        HasClickHandlers getAddStakeholders();

        HasClickHandlers getBtCancelar();

        HasClickHandlers getBtSalvar();
    }

    private final DispatchAsync dispatch;
    private final PlaceManager placeManager;
    private Projeto projeto;

    @Inject
    public AddProjetoPresenter(final EventBus eventBus, final AddProjetoView view, final AddProjetoProxy proxy, final DispatchAsync dispatch,
            final PlaceManager placeManager)
    {
        super(eventBus, view, proxy);
        this.dispatch = dispatch;
        this.placeManager = placeManager;
    }

    @Override
    protected void revealInParent()
    {
        RevealContentEvent.fire(this, MainPresenter.TYPE_SetMainContent, this);
    }

    @Override
    protected void onBind()
    {
        super.onBind();

        getView().getBtSalvar().addClickHandler(new ClickHandler()
        {
            @Override
            public void onClick(ClickEvent event)
            {

            }
        });

        getView().getAddRequisitos().addClickHandler(new ClickHandler()
        {
            @Override
            public void onClick(ClickEvent event)
            {
                PlaceRequest pr = new PlaceRequest(NameTokens.addreq);
                pr.with("oi", "oiiiii"); // HERE
                placeManager.revealPlace(pr, false);
            }
        });
    }

}

ДобавитьRequisitoPresenter

public class AddRequisitoPresenter extends Presenter<AddRequisitoPresenter.AddRequisitoView, AddRequisitoPresenter.AddRequisitoProxy>
{

    @ProxyCodeSplit
    @NameToken(NameTokens.addreq)
    public interface AddRequisitoProxy extends ProxyPlace<AddRequisitoPresenter>
    {

    }

    public interface AddRequisitoView extends PopupView
    {
        DialogBox getDialog();
    }

    private final DispatchAsync dispatcher;
    private Projeto projeto;

    @Inject
    public AddRequisitoPresenter(final EventBus eventBus, final AddRequisitoView view, final AddRequisitoProxy proxy, final DispatchAsync dispatcher)
    {
        super(eventBus, view, proxy);
        this.dispatcher = dispatcher;
    }

    @Override
    public void prepareFromRequest(PlaceRequest request)
    {
        super.prepareFromRequest(request);
        getView().getDialog().setText(request.getParameterNames().size() + ""); //SIZE IS ZERO!!
    }

    @Override
    protected void onBind()
    {
        super.onBind();
    }

    @Override
    protected void revealInParent()
    {
        RevealRootPopupContentEvent.fire(this, this);
    }
}

Я думаю, что я делаю что-то не так...

заранее спасибо.


person caarlos0    schedule 22.09.2011    source источник


Ответы (1)


Насколько я понял из вики, всплывающее окно не может быть местом, и ему нужен родительский докладчик.

Я вижу здесь две очевидные проблемы:

  • Ваш второй докладчик (всплывающее окно) должен реализовывать PresenterWidget, а не Presenter
  • Вы не можете отобразить всплывающее окно, вызвав placeManager.revealPlace(), потому что всплывающее окно — это не место. Вместо этого необходимо применить один из двух методов, описанных в wiki (addToPopupSlot() или RevealRootPopupContentEvent.fire(), оба вызываются из родителя).
person Mikael Couzic    schedule 22.09.2011
comment
Я понимаю.. но с RevealRootPopupContentEvent.fire(), как я могу передать параметры? - person caarlos0; 22.09.2011
comment
на самом деле мой код работает, я просто заменяю PlaceRequest pr = new PlaceRequest(NameTokens.addreq); пр.с(ои, оиииии); by PlaceRequest pr = new PlaceRequest(NameTokens.addreq).with(oi, oiiiiii); и это работает очень хорошо: P, но если вы знаете способ передать параметр виджету ведущего... - person caarlos0; 23.09.2011
comment
Просто сделайте так, чтобы родительский презентатор сохранил ссылку на дочерний элемент, и сделайте так, чтобы родитель вызывал установщик для дочернего элемента, прежде чем он запустит событие RevealRootPopupContentEvent. - person Mikael Couzic; 23.09.2011