1

私は Gwt が初めてで、uibinder を調べています

    <!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
    <ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
          xmlns:g="urn:import:com.google.gwt.user.client.ui"
            xmlns:my = "urn:import:com.kt.outdoor.media.client.view">

    <g:DockLayoutPanel unit='EM'>
        <g:north size='5'>
            <g:FlowPanel styleName="{style.northPanel}">
                <my:Menu ui:field="hello"></my:Menu>
            </g:FlowPanel>
        </g:north>
    </g:DockLayoutPanel>
</ui:UiBinder>`

package com.kt.outdoor.media.client.view;

import com.google.gwt.core.client.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Widget;

public class Menu<T> extends Composite implements MenuView<T> {

    private static MenuUiBinder uiBinder = GWT.create(MenuUiBinder.class);

    interface MenuUiBinder extends UiBinder<Widget, Menu> {
    }

    private Presenter<T> presenter;

    public Menu() {
        initWidget(uiBinder.createAndBindUi(this));
    }

    @Override
    public void setPresenter(Presenter<T> presenter) {
        this.presenter = presenter;
}

    public Widget asWidget() {
        return this;
    }

}

例外は

原因: com.google.gwt.event.shared.UmbrellaException: Exception catch: Deferred binding failed for 'com.kt.outdoor.media.client.view.Menu' (必要なモジュールを継承するのを忘れましたか?)
com.google.gwt.event.shared.HandlerManager.fireEvent(HandlerManager.java:129) で
com.google.gwt.user.client.impl.HistoryImpl.fireEvent (HistoryImpl.java:80) で
com.google.gwt.event.logical.shared.ValueChangeEvent.fire(ValueChangeEvent.java:43) で
com.google.gwt.user.client.impl.HistoryImpl.fireHistoryChangedImpl(HistoryImpl.java:87) で com.google.gwt.user.client.History.fireCurrentHistoryState(History.java:131) で
com.kt.outdoor.media.client.AppController.go (AppController.java:58) で
com.kt.outdoor.media.client.OutDoor_Media.onModuleLoad (OutDoor_Media.java:16) で
... 9 つ以上
原因: java.lang.RuntimeException: Deferred binding failed for 'com.kt.outdoor.media.client.view.Menu' (必要なモジュールを継承するのを忘れましたか?)
com.google.gwt.dev.shell.GWTBridgeImpl.create(GWTBridgeImpl.java:53) で com.google.gwt.core.shared.GWT.create(GWT.java:57) で
com.google.gwt.core.client.GWT.create(GWT.java:85) で
com.kt.outdoor.media.client.view.Home_HomeUiBinderImpl$Widgets.build_hwllo (Home_HomeUiBinderImpl.java:108) で
com.kt.outdoor.media.client.view.Home_HomeUiBinderImpl$Widgets.get_hwllo (Home_HomeUiBinderImpl.java:104) で
com.kt.outdoor.media.client.view.Home_HomeUiBinderImpl$Widgets.build_f_FlowPanel2 (Home_HomeUiBinderImpl.java:93) で
com.kt.outdoor.media.client.view.Home_HomeUiBinderImpl$Widgets.get_f_FlowPanel2 (Home_HomeUiBinderImpl.java:87) で
com.kt.outdoor.media.client.view.Home_HomeUiBinderImpl$Widgets.build_f_DockLayoutPanel1 (Home_HomeUiBinderImpl.java:73) で
com.kt.outdoor.media.client.view.Home_HomeUiBinderImpl$Widgets.get_f_DockLayoutPanel1 (Home_HomeUiBinderImpl.java:67) で
com.kt.outdoor.media.client.view.Home_HomeUiBinderImpl$Widgets.access$0 (Home_HomeUiBinderImpl.java:66) で
com.kt.outdoor.media.client.view.Home_HomeUiBinderImpl.createAndBindUi (Home_HomeUiBinderImpl.java:15) で
com.kt.outdoor.media.client.view.Home_HomeUiBinderImpl.createAndBindUi (Home_HomeUiBinderImpl.java:1) で
com.kt.outdoor.media.client.view.Home.(Home.java:23)
com.kt.outdoor.media.client.AppController.onValueChange (AppController.java:70) で
com.google.gwt.event.logical.shared.ValueChangeEvent.dispatch(ValueChangeEvent.java:128) で
com.google.gwt.event.logical.shared.ValueChangeEvent.dispatch(ValueChangeEvent.java:1) で
com.google.gwt.event.shared.GwtEvent.dispatch(GwtEvent.java:1) で
com.google.web.bindery.event.shared.EventBus.dispatchEvent(EventBus.java:40) で
com.google.web.bindery.event.shared.SimpleEventBus.doFire (SimpleEventBus.java:193) で
com.google.web.bindery.event.shared.SimpleEventBus.fireEvent (SimpleEventBus.java:88) で
com.google.gwt.event.shared.HandlerManager.fireEvent(HandlerManager.java:127) で
... 15以上
原因: com.google.gwt.core.ext.UnableToCompleteException: (以前のログ エントリを参照)
com.google.gwt.dev.shell.ModuleSpace.rebindAndCreate(ModuleSpace.java:513) で
com.google.gwt.dev.shell.GWTBridgeImpl.create (GWTBridgeImpl.java:49) で
... 35以上

誰でも私のコードの何が問題なのか教えてください。

前もって感謝します

これはプレゼンターのコードですが、なぜ失敗するのか理解できません。

package com.kt.outdoor.media.client.presenter;

import com.google.gwt.event.shared.HandlerManager;
import com.google.gwt.user.client.Window;

import com.google.gwt.user.client.ui.HasWidgets;
import com.kt.outdoor.media.client.event.ButtonClickEvent;
import com.kt.outdoor.media.client.view.MenuView;

public class MenuPresenter<String> implements Presenter, MenuView.Presenter<String>{


private final HandlerManager eventBus;
private final MenuView<String> view;

public MenuPresenter(HandlerManager eventBus, MenuView<String> view) {

    this.eventBus = eventBus;
    this.view = view;

    this.view.setPresenter(this);

}

@Override
public void onMenuButtonClicked() {
    Window.alert("Hello!");
    eventBus.fireEvent(new ButtonClickEvent());

}

@Override
public void go(HasWidgets container) {
    container.clear();
    container.add(view.asWidget());

}

}

リクエストに応じてプレゼンターコードを添付

4

2 に答える 2

0

プロジェクトの設定に関係があります。スタックトレースの主な問題は、クラスが存在する gwt.xml モジュールを GWT コンパイラが参照しないことcom.kt.outdoor.media.client.view.Menuです。GWT モジュールの xml ファイルの設定を再確認するか、プロジェクトのレイアウトと gwt.xml を質問に投稿してください。

于 2013-04-27T13:48:19.083 に答える