2012-02-29 10 views
9

Posso utilizzare i valori enum come valori di campo all'interno del modello di UiBinder? Sto usando GWT 2.4Posso usare i valori enum come valori di campo nel modello di UiBinder?

Qualcosa di simile

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

sembra essere molto promettente, in cui

public enum PayerType 
{ 
    Sender, 
    Recipient 
} 

ma non riesco a fare riferimento ai valori della enum da en.Sender.

È possibile?

risposta

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

o

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

E poi si può utilizzare come payerType='{Sender}'.

Ma UiBinder dovrebbe cercare automaticamente a tradurre enum nomi costanti in valori, quindi il seguente dovrebbe funzionare senza la necessità di un ui:with:

<my:MyWidget payerType='Sender' /> 

Se il widget MyWidget ha un metodo public void setPayerType(PayerType type), UiBinder dovrebbe cercare un valore enum denominato Sender (dal file *.ui.xml) nell'enumerazione PayerType (dal tipo di argomento del metodo).

+0

Purtroppo non funziona in runtime dicendo: 'ERRORE: restituisce classe com.mine.courierApp.shared.PayerType, non può essere utilizzato come classe java.lang.String' – expert

+0

Thomas, posso chiedere anche a dare un'occhiata a [questa domanda] (http://stackoverflow.com/questions/9476341/)? Sai molto su GWT internals. – expert

+0

Mi spiace, dovrebbe essere 'ui: import' invece di' ui: with'. Ho appena controllato i [unit-test per la funzione] (http://code.google.com/p/google-web-toolkit/source/browse/trunk/user/test/com/google/gwt/uibinder/ test/client/WidgetBasedUi.ui.xml # 83) (e si può dare un'occhiata al 'EnumeratedLabel' lì per un esempio di traduzione automatica di una stringa in un valore enum. –

0

Se non ui: importare la classe enum come questo:

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

allora non si ottiene il contenuto-assist, che l'intero punto di questo in primo luogo.

Ma poi si esegue in un altro problema ...

Anche se è possibile tipo semplice {Ctrl-Spazio} per ottenere un menu a comparsa del valore enum, se si sta utilizzando, per esempio, bootstrap3, ci sono vari enum che hanno ciascuno il proprio valore "DEFAULT". L'editore di template ui si lamenterà di ciò; Ad esempio, se si inizia a utilizzare in modo approfondito questa funzione di assistenza contenuto, è necessario assicurarsi che le enumerazioni importate abbiano nomi di valori univoci.