2009-02-13 12 views
11

Sto utilizzando Spring per un modulo HTML. Uno dei campi è un enum e quindi mi piacerebbe un elenco a discesa HTML (tag <option>). Il mio nome enum è diverso dal valore toString(). Per esempio:Utilizzare il tag di opzioni Spring per visualizzare il valore toString di enum

public enum Size { 
    SMALL("Small"), LARGE("Large"), VERY_LARGE("Very large"); 

    private final String displayName; 

    private Size(String displayName) { 
     this.displayName = displayName; 
    } 

    public String toString() { 
     return displayName; 
    } 
} 

voglio all'utente di vedere il valore toString(). Normalmente questo viene realizzato usando lo itemLabel del tag di opzioni Spring.

<form:options items="${enumValues}" itemLabel="beanProperty" /> 

Ma toString() non è una proprietà di fagioli perché non inizia con "get". C'è un modo per impostare itemLabel per usare il valore di toString senza dover creare un getter?

risposta

6

So che ha pochi anni e deve essere risolto, ma ho pensato di aggiungere la soluzione per i futuri arrivati.

Basta rimuovere la parte [itemLabel = "beanProperty"]. Utilizzerà toString per stampare i valori.

+4

Mai troppo tardi: http://xkcd.com/979/ –

+0

Questo funzionava in 3.0, ma è stato interrotto dal 3.1, vedere https://jira.spring.io/browse/SPR-9214 e https://jira.spring.io/browse/SPR-10281 –

2

Perché non aggiungere un metodo pubblico getDisplayName() all'enumerazione?

+0

Sto cercando di evitare di aggiungere questo metodo extra a ogni enumerazione. Non aiuta l'enumerazione che non può essere estesa. –

1

Hai provato a utilizzare il potente modello AOP di Spring per estendere le tue enum da un'unica posizione? Sembrerebbe che, in base al numero di enumerazioni disponibili, è possibile aggiungere facilmente un metodo getDisplayName() a tutti che restituisce semplicemente il valore toString().