2008-10-02 18 views
30

Es gibt eine Auswahl Dropdown und ich möchte "Keine Auswahl" Element zur Liste hinzufügen, die mir 'Null' geben sollte, wenn sie gesendet wird. Ich verwende SimpleFormController abgeleiteten Controller.Spring MVC Form-Tags: Gibt es eine Standardmethode zum Hinzufügen von "Keine Auswahl"?

protected Map referenceData(HttpServletRequest httpServletRequest, Object o, Errors errors) throws Exception { 
    Map<String, Object> map = new HashMap<String, Object>(); 

    map.put("countryList", Arrays.asList(Country.values())); 

    return map; 
} 

Und der JSPX Teil ist

<form:select path="country" items="${countryList}" title="country"/> 

Eine mögliche Lösung bei der Zugabe eines Nullwertes an den Anfang der Liste zu sein scheint, und dann eine benutzerdefinierte Property mit diesem ‚Null‘ disply als ' Keine Auswahl'. Gibt es eine bessere Lösung?

@Edit: Ich habe dies mit einer benutzerdefinierten Validierung Annotation gelöst, die überprüft, ob der ausgewählte Wert "keine Auswahl" ist. Gibt es eine standardisierte und einfachere Lösung?

Antwort

36

Eine Option:

<form:select path="country" title="country" > 
    <form:option value="">&nbsp;</form:option> 
    <form:options items="${countryList}" /> 
</form:select> 
+0

Watch out mit der benannten Entität ' ' in jspx Seiten (es führt vor kurzem zu Fehlern für mich, dass die Entität nicht definiert ist, oder einige solche). Es scheint sicherer zu sein, auf das nicht-brechende Leerzeichen durch seinen Code zu verweisen: ' ' – Michael

+1

Auf diese Weise wird NoSelection einen leeren String, nicht 'null', obwohl. Wert = $ {null} sollte Null schreiben. – javabot

0

Das glaube ich nicht, dass Sie einen Eigenschaftseditor für diese benötigen sollten. Wenn die Option "leer" in der Liste zuerst angezeigt wird und das Tag, das die Liste ausgibt, keines davon als ausgewählt markiert, sollte der Browser automatisch das erste "leere" auswählen.

Wenn Sie das Formular absenden, versuchen Sie, es so zu arbeiten, dass der "leere" Wert an Ihren Befehl als Null gebunden ist, was je nach Typ automatisch passieren kann.