2012-05-03 48 views
1

我得到這個錯誤時運行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 
} 

在杜松子酒ClientModule.java配置()函數,我有這樣的代碼:

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

在視圖類的initWidget ()被正確調用並通過一個小部件,可能會導致錯誤?

+0

我的應用程序曾用於在基於UiBinder視圖的bindPresenter中使用的視圖。然而,由於某種原因,我需要使用一個View,它是從Composite中擴展而來的純GWT小部件。現在它不會工作。 – xybrek

+0

您應該發佈更多關於您的'MainView'類的代碼。 – Sydney

回答

3

未調用UIObject.setElement時會發生此錯誤。如果您使用非null小部件調用Composite.initWidget,請確保該小部件正確設置其自己的元素。如果這是一個標準的GWT小部件,它應該這樣做,但否則有可能傳遞到initWidget的小部件設置不正確。

+0

我不得不在構造函數的外部編碼initWidget()中插入的小部件,即Horizo​​ntalPanel panel = new Horizo​​ntalPanel(),而不是在構造上初始化它(雖然在傳遞給courseWidget之前進行初始化) – xybrek

+0

這就是問題 - 在將組合添加到其父組件後添加根組件,因此無法繪製任何內容。這是系統的工作方式,initWidget必須被調用。一個可能的破解可能是使用面板initWidget,然後將Horizo​​ntalPanel添加到_that_面板。 –

3

這就是我如何創建一個Composite,稍後我將在View中使用它。

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

MyCustomBoxUiBinder擴展了哪些類? – xybrek

+0

它在代碼中:'擴展UiBinder ' – Sydney

相關問題