0

先日質問を投稿しましたが、あまり回答がありませんでした。私はいくつかのことを試しましたが、まだ運がありません。GWTP でタブ プレゼンターをネストしようとしています。タブ グループ 1 である 1 つのフレーム (北) とタブ グループ 2 である 1 つのフレーム (西) があります。グループ 1 を操作すると、グループ 2 を制御するネストされたタブ プレゼンターを更新します。ネストされたタブの例を見てきました。発表者ですが、それから自分のエラーを特定できませんでした。

2 つの TabContainerPresenters は、ManagementTabsPresenter と SettingsTabsPresenter です。これらの子は、以下の HomePresenter のようなものです。これらの子のコンテンツは、MainPreseter にある DockLayoutPanel の中央に表示されます。ManagementTabsPresenter と SettingsTabsPresenter を同じ DockLayoutPanel の West スロットに表示したい。

このコードを実行すると、すべてが画面上の正しい場所に配置されます。タブをクリックしてアクションを実行することもできます。問題は、デフォルト ページが HomePresenter であるにもかかわらず、SettingsPresenter が最初に表示されることから始まります。起動時に両方を同時に明らかにしようとするようなものです。次に、ManagementTabsPresenter または SettingsTabsPresenter の一部であるタブのいずれかを選択すると、MainPresenter.Center_Slot の正しいコンテンツが開きますが、MainPresenter.West_Slot に正しくないプレゼンターが表示されます。ここで何が問題なのかわかりません。どんな助けでも大歓迎です。

コードは次のとおりです。

public class HomePresenter extends Presenter<HomePresenter.MyView, HomePresenter.MyProxy> {
@Inject
AppPlaceManager appPlaceManager;

@NameToken(NameTokens.homePage)
@ProxyStandard
@NoGatekeeper
public interface MyProxy extends TabContentProxyPlace<HomePresenter> {
}

public interface MyView extends View {
}

@TabInfo(container = ManagementTabsPresenter.class)
static TabData getTabLabel(MainAppGinjector injector) {
    return new TabDataBasic("home", 0);
}

@Inject
public HomePresenter(final EventBus eventBus, final MyView view, final MyProxy proxy) {
    super(eventBus, view, proxy);
}

@Override
protected void revealInParent() {
    RevealContentEvent.fire(this, ManagementTabsPresenter.TYPE_MAIN_CONTENT_SLOT, this);
}
}





public class ManagementTabsPresenter extends TabContainerPresenter<ManagementTabsPresenter.MyView, ManagementTabsPresenter.MyProxy> {

/**
 * {@link ManagementTabsPresenter}'s proxy.
 */
@ProxyStandard
public interface MyProxy extends NonLeafTabContentProxy<ManagementTabsPresenter> {
}

/**
 * {@link ManagementTabsPresenter}'s view.
 */
public interface MyView extends TabView {
}

/**
 * Use this in leaf presenters, inside their {@link #revealInParent} method.
 */
@ContentSlot
public static final GwtEvent.Type<RevealContentHandler<?>> TYPE_MAIN_CONTENT_SLOT = MainPresenter.CENTER_SLOT;


/**
 * This will be the event sent to our "unknown" child presenters, in order for
 * them to register their tabs.
 */
@RequestTabs
public static final Type<RequestTabsHandler> TYPE_Management_RequestTabs = new Type<RequestTabsHandler>();

@TabInfo(container = HeaderTabsPresenter.class, nameToken = NameTokens.homePage)
static TabData getTabLabel(MainAppGinjector injector) {
    return new TabDataBasic("Management", 0);
}

@Inject
public ManagementTabsPresenter(final EventBus eventBus, final MyView view,
                               final MyProxy proxy,  AppPlaceManager appPlaceManager) {
    super(eventBus, view, proxy,TYPE_MAIN_CONTENT_SLOT, TYPE_Management_RequestTabs);
}


@Override
protected void revealInParent() {
    RevealContentEvent.fire(this,  HeaderTabsPresenter.TYPE_VERTICAL_TABS_SLOT, this);
}
}



public class SettingsTabsPresenter extends TabContainerPresenter<SettingsTabsPresenter.MyView, SettingsTabsPresenter.MyProxy> {

/**
 * {@link SettingsTabsPresenter}'s proxy.
 */
@ProxyStandard
public interface MyProxy extends NonLeafTabContentProxy<SettingsTabsPresenter> {
}

/**
 * {@link SettingsTabsPresenter}'s view.
 */
public interface MyView extends TabView {
}

@TabInfo(container = HeaderTabsPresenter.class, nameToken = NameTokens.appUserCollectionPage)
static TabData getTabLabel(MainAppGinjector injector) {
    return new TabDataBasic("Settings", 1);
}

/**
 * Use this in leaf presenters, inside their {@link #revealInParent} method.
 */
@ContentSlot
public static final GwtEvent.Type<RevealContentHandler<?>> TYPE_MAIN_CONTENT_SLOT = MainPresenter.CENTER_SLOT;


/**
 * This will be the event sent to our "unknown" child presenters, in order for
 * them to register their tabs.
 */
@RequestTabs
public static final Type<RequestTabsHandler> TYPE_Settings_RequestTabs = new Type<RequestTabsHandler>();

@Inject
public SettingsTabsPresenter(final EventBus eventBus, final MyView view,
                               final MyProxy proxy,  AppPlaceManager appPlaceManager) {
    super(eventBus, view, proxy,TYPE_MAIN_CONTENT_SLOT, TYPE_Settings_RequestTabs);
}


@Override
protected void revealInParent() {
    RevealContentEvent.fire(this,  HeaderTabsPresenter.TYPE_VERTICAL_TABS_SLOT, this);
}
}


public class HeaderTabsPresenter extends TabContainerPresenter<HeaderTabsPresenter.MyView, HeaderTabsPresenter.MyProxy> {
@Inject EventBus eventBus;

/**
 * {@link HeaderTabsPresenter}'s proxy.
 */
@ProxyStandard
public interface MyProxy extends Proxy<HeaderTabsPresenter> {
}

/**
 * {@link HeaderTabsPresenter}'s view.
 */
public interface MyView extends TabView {
    void changeTab(Tab tab, TabData tabData, String historyToken);
}

/**
 * This will be the event sent to our "unknown" child presenters, in order for
 * them to register their tabs.
 */
@RequestTabs
public static final Type<RequestTabsHandler> TYPE_HEADER_RequestTabs = new Type<RequestTabsHandler>();

/**
 * Fired by child proxie's when their tab content is changed.
 */
@ChangeTab
public static final Type<ChangeTabHandler> TYPE_HEADER_ChangeTab = new Type<ChangeTabHandler>();

@ContentSlot
public static final Type<RevealContentHandler<?>> TYPE_VERTICAL_TABS_SLOT = MainPresenter.WEST_SLOT;

@Inject
public HeaderTabsPresenter(final EventBus eventBus, final MyView view,
                           final MyProxy proxy) {
    super(eventBus, view, proxy, TYPE_VERTICAL_TABS_SLOT, TYPE_HEADER_RequestTabs, TYPE_HEADER_ChangeTab);
}


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

}



public class MainPresenter extends Presenter<MainPresenter.MyView, MainPresenter.MyProxy>{

@Inject VSMRequestFactory requestFactory;
@Inject VSMMessages vsmMessages;
@Inject VSMExceptionMessages vsmExceptionMessages;
@Inject EventBus eventBus;

@ProxyStandard
@NoGatekeeper
public interface MyProxy extends Proxy<MainPresenter> {
}

public interface MyView extends View {

}

@ContentSlot
public static final Type<RevealContentHandler<?>> SOUTH_SLOT = new Type<RevealContentHandler<?>>();
@ContentSlot
public static final Type<RevealContentHandler<?>> WEST_SLOT = new Type<RevealContentHandler<?>>();
@ContentSlot
public static final Type<RevealContentHandler<?>> CENTER_SLOT = new Type<RevealContentHandler<?>>();
@ContentSlot
public static final Type<RevealContentHandler<?>> NORTH_SLOT = new Type<RevealContentHandler<?>>();

@Inject
public MainPresenter(EventBus eventBus, MyView view, MyProxy proxy) {
    super(eventBus, view, proxy);
}

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

@Override
protected void onReveal() {
    super.onReveal();
    initializeAppUser();
}

}
4

1 に答える 1

0

私は以前に似たようなものに出くわしました...両方ともTabContainerPresenterから継承し、間違った継承された子に対してonReveal()を呼び出すgwtpにバグがあるためだと思います。

このgwtpフォーラムの投稿をご覧ください: https ://groups.google.com/forum/?fromgroups#!searchin / gwt-platform / gilad $ 20egozi / gwt-platform / p0s3BlN-ceE / 5EL3nynaiu4J

そうですか?もしそうなら、誰もgwtp Issue Trackerにバグを提出したとは思わないので、私に知らせてください。

(もちろん、最良のチェックは、継承して機能するかどうかを確認しないことです)

于 2012-07-05T15:05:34.600 に答える