2009-02-13 7 views
11

Ich verwende Spring für ein HTML-Formular. Eines der Felder ist ein enum und daher möchte ich eine HTML-Dropdown-Liste (<option>-Tag). Der Name meines Namens ist anders als der toString() Wert. Zum Beispiel:Verwenden Sie das Spring options-Tag, um den toString-Wert der Enumeration anzuzeigen

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; 
    } 
} 

Ich möchte der Benutzer den toString() Wert sehen. Normalerweise wird dies unter Verwendung des itemLabel des Spring Options-Tags erreicht.

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

Aber toString() ist kein Bean-Eigenschaft, da es nicht mit „get“ beginnt. Gibt es eine Möglichkeit, itemLabel den toString-Wert zu verwenden, ohne einen Getter erstellen zu müssen?

Antwort

6

Ich weiß, das ist ein paar Jahre alt und muss jetzt gelöst werden, aber ich dachte, ich würde die Lösung für zukünftige Ankömmlinge hinzufügen.

Entfernen Sie einfach den [itemLabel = "beanProperty"] Teil. Es verwendet den toString, um die Werte zu drucken.

+4

Nie zu spät: http://xkcd.com/979/ –

+0

Dies verwendet, um in 3.0 zu arbeiten, wurde aber seit 3.1 gebrochen, siehe https://jira.spring.io/browse/SPR-9214 und https://jira.spring.io/browse/SPR-10281 –

2

Warum nicht eine öffentliche Methode getDisplayName() zu Ihrer Enum hinzufügen?

+0

Ich versuche zu vermeiden, diese zusätzliche Methode zu jedem Enum hinzuzufügen. Es hilft nicht, dass enum nicht erweitert werden kann. –

1

Haben Sie versucht, das leistungsstarke AOP-Modell von Spring zu verwenden, um Ihre Enums von einem Ort aus zu erweitern? Es scheint, dass Sie, je nachdem wie viele Enums Sie haben, einfach eine Methode hinzufügen können, die einfach ihren toString() Wert zurückgibt.

Verwandte Themen