2014-07-21 63 views
0

在我的應用程序中將GWT從2.5.1升級到2.6.1後,我得到了幾個GWT編譯器錯誤,用於特定的自我實現複合小部件。升級後:GWT 2.6.1編譯器失敗:字段沒有'addValueChangeHandler'方法關聯

對於含這個小部件,它說一個觀點:

Rebinding com.myapp.client.page.FilterPanel.Binder 
    [java]   Invoking generator com.google.gwt.uibinder.rebind.UiBinderGenerator 
    [ERROR] Field 'statusBox' does not have an 'addValueChangeHandler' method associated. 
[ERROR] Errors in 'gen/com/myapp/client/page/com_myapp_client_config_MyAppGinjector_MyappGinjectorGinjector_fragment.java' 

領域是一個通用的建議包含TextBoxDefaultMultiWordSuggestBox

public class SuggestValueBox<T> extends Composite implements HasConstrainedValue<T> { 
... 

    @Override 
    public HandlerRegistration addValueChangeHandler(ValueChangeHandler<T> handler) { 
     return addHandler(handler, ValueChangeEvent.getType()); 
    } 
} 

盒因此,我認爲,外地有這樣的一個方法。

看來,如果通用類型T是一個枚舉(相同的觀點也SuggestValueBox<String>實例這似乎是爲編譯器確定。)的枚舉類型是shared包裝內的編譯器只失敗。

我也發現這個問題https://code.google.com/p/google-web-toolkit/issues/detail?id=6091這似乎是相關的,但這應該在我升級到的版本中修復。

謝謝, Rainer。

回答

1

我發現問題的根源 - 在我身邊。

的問題是,我認爲有幾個實例上SuggestValueBox<T>各種T但只有一個@UiHandler方法,所有這些情況對於一個具體的類型T

@UiHandler({"fieldForTypeA", "fieldForTypeB"}) 
public void onValueChange(@SuppressWarnings("unused") ValueChangeEvent<TypeA> event) { 
    this.submit(); 
} 

正如你看到的,這個工作之前,因爲我沒有使用event的內容。

對於每種具體類型T都有一個onValueChange可以解決這個問題。

+0

事實上,它之前的工作原理是因爲與原始類型匹配,而不是因爲您沒有使用事件的內容。 –

+0

你說得對。我應該說:我不關心這種類型,因爲我沒有使用論據。 ;-) – rainer198