¿Error al vincular la vista con el presentador?

Recibo este error cuando ejecuto la aplicación 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
}

en la ginebra ClientModule.java función configure () Tengo este código:

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

En la clase de vista, initWidget() se llama correctamente y se pasa con un widget, ¿qué podría estar causando el error?

preguntado el 03 de mayo de 12 a las 11:05

Mi aplicación solía trabajar con la vista que uso en bindPresenter, que se basa en la vista de UiBinder. Sin embargo, por alguna razón, necesito usar una Vista que es un widget GWT simple que se extiende desde Compuesto. Ahora no funcionará. -

Deberías publicar más código sobre tu MainView clase. -

2 Respuestas

Este error ocurre cuando UIObject.setElement no se llama. si estas llamando Composite.initWidget con un widget no nulo, asegúrese de que ese widget esté configurando su propio elemento correctamente. Si se trata de un widget GWT estándar, debería estar haciendo eso, pero de lo contrario, es posible que el widget haya pasado a initWidget no está configurado correctamente.

contestado el 03 de mayo de 12 a las 17:05

Tuve que codificar el widget que se inserta en initWidget() fuera del constructor, es decir, HorizontalPanel panel = new HorizontalPanel() en lugar de inicializarlo en la construcción (aunque inicializándolo antes de pasar a initWidget, por supuesto) - quarks

Y ese es el problema: está agregando el widget raíz después de que el compuesto se haya agregado a su elemento principal, por lo que no se puede dibujar nada. Así es como funciona el sistema, initWidget debe ser llamado para entonces. Un posible truco podría ser initWidget con un panel, luego agregar el HorizontalPanel a que panel. - colin alworth

Así es como creo un Composite que usaré más adelante en una Vista.

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));
    }
}

contestado el 03 de mayo de 12 a las 22:05

¿Qué clase extiende MyCustomBoxUiBinder? - quarks

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.