2012-02-29 50 views
9

我可以使用枚舉值作爲UiBinder模板中的字段值嗎?我使用GWT 2.4我可以使用枚舉值作爲UiBinder模板中的字段值嗎?

像這樣的事情

<ui:with field="en" type="com.mine.courierApp.shared.PayerType" /> 

看起來很有希望,其中

public enum PayerType 
{ 
    Sender, 
    Recipient 
} 

,但我不能en.Sender指枚舉值。

這有可能嗎?

回答

12
<ui:import field='com.mine.courierApp.shared.PayerType.Sender' /> 

<ui:import field='com.mine.courierApp.shared.PayerType.*' /> 

然後你可以使用它作爲payerType='{Sender}'

但UiBinder的應自動嘗試翻譯枚舉常量名到值,所以下面應該無需任何一個ui:with工作:

<my:MyWidget payerType='Sender' /> 

如果MyWidget小部件有一個public void setPayerType(PayerType type)方法,UiBinder的應該尋找一種在PayerType enum(來自方法的參數類型)中,枚舉值名爲Sender(來自*.ui.xml文件)。

+0

不幸的是,它在運行時失敗說:'錯誤:返回類com.mine.courierApp.shared.PayerType,不能用作類java.lang.String' – expert 2012-02-29 19:34:19

+0

托馬斯,我可以問你也看看[這個問題](http://stackoverflow.com/questions/9476341/)?你對GWT內部知道很多。 – expert 2012-02-29 20:04:57

+0

對不起,應該是'ui:import'而不是'ui:with'。我剛剛檢查了[功能的單元測試](http://code.google.com/p/google-web-toolkit/source/browse/trunk/user/test/com/google/gwt/uibinder/測試/客戶端/ WidgetBasedUi.ui.xml#83)(你可以看看'EnumeratedLabel'那裏有一個自動將字符串轉換爲枚舉值的例子 – 2012-03-01 16:49:21

0

如果不這樣做的用戶界面:導入枚舉類是這樣的:

<ui:import field='com.mine.courierApp.shared.PayerType.*' /> 

那麼你沒有得到內容輔助,它的這個擺在首位的整點。

但後來你遇到了另一個問題...

雖然你可以簡單類型{CTRL空間}來獲取枚舉值的彈出菜單,如果您使用的,比方說,bootstrap3,有各種枚舉每個都有自己的「DEFAULT」值。 ui模板編輯器會抱怨這個;即如果您開始大量使用此內容輔助功能,則需要確保導入的枚舉具有唯一的值名稱。

相關問題