2012-06-20 20 views
11

Esempio:utilizzando il valore di enumerazione in g: selezionare quando enum è attributo dell'oggetto selezione

batchTag è un attributo tipo enumerato di un batchRange, con valori in questo modo:

JAN1 "January Biweekly 1", 
JAN2 "January Biweekly 2", 

ecc.

Desidero visualizzare il VALORE del batchTag nella selezione, IOW, la selezione deve contenere

"January Biweekly 1" 
"January Biweekly 2" ... 

non

JAN1 
JAN2 
FEB1 
FEB2 
FEB3 ... 

Ho provato parecchie cose nel g: selezionare per fare questo, ma senza alcun successo. Ho pensato che forse "it" sarebbe stato disponibile come parte della g: select (come è chiaramente un'iterazione) e ho provato a fare riferimento a it.batchTag.name per l'opzioneValue, ma non ha funzionato. Eventuali suggerimenti?

Grazie!

risposta

20
enum BatchRange { 
    JAN1 "January Biweekly 1", 
    JAN2 "January Biweekly 2", 

    final String value 

    BatchRange(String value) { this.value = value } 

    String toString() { value } 
    String getKey() { name() } 
} 

Nota il metodo getKey(). E poi il tuo g: selezionare

<g:select name="batch" from="${BatchRange.values()}" optionKey="key" /> 

o

<g:select name="batch" from="${BatchRange.values()}" keys="${BatchRange.values()*.name()}" /> 
+1

Grazie! Il secondo suggerimento è ciò che cercavo. – Alexx

+0

Perfetto! Grazie –

+0

La prima soluzione di tag può essere semplificata in ''. Quindi non è necessario nemmeno i metodi BatchRange toString o getKey. – Wonko

0

Un approccio migliore potrebbe essere quella di utilizzare i messaggi i18n in questo caso. Sono disponibili due opzioni:

  1. Aggiungi valoreMessaggioPrefisso alla selezione.
  2. Effettuare l'enum attuare org.springframework.context.MessageSourceResolvable come descritto in this blog post.

Vedere this question per ulteriori informazioni.