2008-10-02 25 views
30

Istnieje menu rozwijane i chcę dodać pozycję "Brak wyboru" do listy, która powinna dać mi "null" po przesłaniu. Korzystam z kontrolera pochodnego SimpleFormController.Wiosenne znaczniki formularza MVC: Czy istnieje standardowy sposób dodawania elementu "Brak wyboru"?

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

A jspx część jest

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

Możliwym rozwiązaniem wydaje się być na dodaniu wartości null na początku listy, a następnie przy użyciu niestandardowego PropertyEditor do Disply to 'null' jako ' Brak wyboru'. Czy istnieje lepsze rozwiązanie?

@Edit: Rozwiązałem to za pomocą niestandardowej adnotacji sprawdzania poprawności, która sprawdza, czy wybrana wartość to "Brak zaznaczenia". Czy istnieje bardziej standardowe i łatwiejsze rozwiązanie?

Odpowiedz

36

Jedną z opcji:

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

Uważaj przy użyciu nazwanego obiektu ' ' na stronach jspx (ostatnio prowadzi to do błędów dla mnie, stwierdzając, że obiekt nie jest zdefiniowany, lub niektóre z nich). Wydaje się bezpieczniejsze odwoływanie się do spacji nierozdzielającej według jej kodu: ' ' – Michael

+1

W ten sposób NoSelection opublikuje pusty łańcuch, a nie 'null'. value = $ {null} powinno opublikować wartość null. – javabot

0

nie sądzę, powinny trzeba edytor właściwości dla tego produktu. Jeśli opcja "puste" jest pierwsza na liście, a znacznik, który wyprowadza listę, nie zaznacza żadnej z nich jako wybranej, to przeglądarka powinna automatycznie wybrać pierwszy, "pusty".

Po przesłaniu formularza spróbuj go przetestować, aby wartość "pusta" była przypisana do polecenia jako wartość pusta, co może się zdarzyć automatycznie, w zależności od typu.