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:捕获异常:“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: '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

1

我遇到了同样的问题。这就是我解决它的方法。首先检查您的 .gwt.xml 中是否已经有此条目

<source path='client'/>
<source path='shared'/>

如果它已经存在,请检查您是否使用最新的 xerces jar。我的问题通过从 xerces/xercesImpl.jar-2.6.2 更新到 xercesImpl.jar - 2.9.1 得到解决。
这是我在 GWT 编译期间遇到的错误。

     java.lang.AbstractMethodError: 
     org.apache.xerces.dom.ElementNSImpl.setUserData(Ljava/lang/ 
     String;Ljava/lang/Object;Lorg/w3c/dom/UserDataHandler;)Ljava/lang/ 
     Object; 
     at com.google.gwt.uibinder.rebind.W3cDocumentBuilder.startElement(W3cDocumentB 
uilder.java:130)

您可以从http://mojo.codehaus.org/gwt-maven-plugin/dependencies.html下载 jar

让我知道这是否有效!

于 2013-07-04T08:15:56.887 回答
0

它与您的项目设置有关。堆栈跟踪中的主要问题是 GWT 编译器没有将 gwt.xml 模块设置在com.kt.outdoor.media.client.view.Menu类所在的位置。请仔细检查您的 GWT 模块 xml 文件设置,或者更好地将您的项目布局和 gwt.xml 发布到您的问题中。

于 2013-04-27T13:48:19.083 回答