Gwt 将视图绑定到演示者时出错?

Gwt 将视图绑定到演示者时出错?,gwt,dependency-injection,guice,gwt-gin,gwt-platform,Gwt,Dependency Injection,Guice,Gwt Gin,Gwt Platform,我在运行GWT应用程序时遇到此错误: java.lang.AssertionError: This UIObject's element is not set; you may be missing a call to either Composite.initWidget() or UIObject.setElement() public class MainView extends Composite implements HeaderPresenter.MyView { // Cod

我在运行GWT应用程序时遇到此错误:

java.lang.AssertionError: This UIObject's element is not set; you may be missing a call to either Composite.initWidget() or UIObject.setElement()

public class MainView extends Composite implements HeaderPresenter.MyView {
  // Code omitted
}
在GinClientModule.javaconfigure()函数中,我有以下代码:

bindPresenter(HeaderPresenter.class, HeaderPresenter.MyView.class,
                MainView.class, HeaderPresenter.MyProxy.class);

在视图类中,initWidget()被正确调用并与小部件一起传递,是什么导致了错误

未调用
UIObject.setElement
时会发生此错误。如果使用非空小部件调用
Composite.initWidget
,请确保该小部件正确设置了自己的元素。如果这是一个标准的GWT小部件,它应该这样做,但否则传递给
initWidget
的小部件可能没有正确设置。

当未调用
UIObject.setElement
时,会发生此错误。如果使用非空小部件调用
Composite.initWidget
,请确保该小部件正确设置了自己的元素。如果这是一个标准的GWT小部件,它应该这样做,但是,否则传递给
initWidget
的小部件可能没有正确设置。

这就是我创建一个
复合
的方法,我将在以后的视图中使用它

public class MyCustomBox extends Composite {

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

    interface MyCustomBoxUiBinder extends UiBinder<Widget, MyCustomBox> {
    }

    public MyCustomBox() {
        initWidget(uiBinder.createAndBindUi(this));
    }
}
公共类MyCustomBox扩展了复合{
私有静态MyCustomBoxUiBinder uiBinder=GWT.create(MyCustomBoxUiBinder.class);
接口MyCustomBoxUiBinder扩展了UiBinder{
}
公共MyCustomBox(){
initWidget(uiBinder.createAndBindUi(this));
}
}

这就是我如何创建一个
组合的方法,稍后我将在视图中使用它

public class MyCustomBox extends Composite {

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

    interface MyCustomBoxUiBinder extends UiBinder<Widget, MyCustomBox> {
    }

    public MyCustomBox() {
        initWidget(uiBinder.createAndBindUi(this));
    }
}
公共类MyCustomBox扩展了复合{
私有静态MyCustomBoxUiBinder uiBinder=GWT.create(MyCustomBoxUiBinder.class);
接口MyCustomBoxUiBinder扩展了UiBinder{
}
公共MyCustomBox(){
initWidget(uiBinder.createAndBindUi(this));
}
}

我的应用程序使用基于UiBinder视图的bindPresenter中使用的视图。然而,出于某种原因,我需要使用一个从Composite扩展而来的普通GWT小部件的视图。现在它不起作用了。你应该发布更多关于你的
MainView
类的代码。我的应用程序使用的是我在基于UiBinder视图的bindPresenter中使用的视图。然而,出于某种原因,我需要使用一个从Composite扩展而来的普通GWT小部件的视图。现在它不起作用了。你应该发布更多关于你的
MainView
类的代码。MyCustomBoxUiBinder扩展了什么类?MyCustomBoxUiBinder扩展了什么类?我必须对插入构造函数外部initWidget()中的小部件进行编码,即HorizontalPanel=new HorizontalPanel()与在构造上初始化它相反(当然,尽管在传递到initWidget之前初始化),这就是问题所在-您在将组合添加到其父级后添加根小部件,因此无法绘制任何内容。这就是系统的工作方式,必须在那时调用initWidget。一种可能的破解方法是使用面板初始化widget,然后将HorizontalPanel添加到该面板中。我必须对插入构造函数外部initWidget()中的小部件进行编码,即HorizontalPanel=new HorizontalPanel(),而不是在构造上初始化它(当然,尽管在传递到initWidget之前正在初始化)这就是问题所在-在将组合添加到其父级之后添加根小部件,因此无法绘制任何内容。这就是系统的工作方式,initWidget必须在那时调用。一个可能的黑客可能是使用面板初始化小部件,然后将HorizontalPanel添加到该面板。