2013-06-28 8 views
17

Używam Spring MVC dla aplikacji internetowej. Na formularzu, mamZnacznik wyboru formularza wiosennego: dlaczego generujesz ukryty element?

<form:checkbox path="agreeTerms" id="agreeTerms"/> 

Gdy strona jest renderowane, następujące HTML jest generowany

<input id="agreeTerms" type="checkbox" value="true" name="agreeTerms"> 
<input type="hidden" value="on" name="_agreeTerms"> 

Czy ktoś zna cel ukryty tag? Co by się stało, gdyby ukryty znacznik wejściowy został usunięty?

Dzięki!

Odpowiedz

20

Ukryty znacznik wejściowy służy do wskazania pola, które pierwotnie stanowiło część formularza. Po przesłaniu formularza pole wejściowe pola wyboru jest wysyłane tylko wtedy, gdy ma wartość ("sprawdzone"). Jeśli nie jest wybrane, nic nie jest wysyłane. Podkreślone prefiksem ukryte pole służy do wskazania, że ​​było częścią formularza, ale powinno być domyślnie ustawione na "un-checked/false".

Możesz to przetestować, tworząc formularz HTML z polem wyboru i przesyłając go bez zaznaczonego pola.

Ponadto, aby zobaczyć, jak to się robi sprawdzić kod źródłowy WebDataBinder:

/** 
* Check the given property values for field markers, 
* i.e. for fields that start with the field marker prefix. 
* <p>The existence of a field marker indicates that the specified 
* field existed in the form. If the property values do not contain 
* a corresponding field value, the field will be considered as empty 
* and will be reset appropriately. 
* @param mpvs the property values to be bound (can be modified) 
* @see #getFieldMarkerPrefix 
* @see #getEmptyValue(String, Class) 
*/ 
+0

Wielkie dzięki za wkład! "Jeśli nie jest wybrany, nic nie jest wysyłane."? Wysłane przez przeglądarkę? Czy masz na myśli to, że jest częścią specyfikacji HTML? – curious1

+2

Tak, jest to część specyfikacji HTML. Niezaznaczone wartości pól wyboru nie są wysyłane przez przeglądarkę do serwera po przesłaniu formularza. Ogólnym obejściem jest posiadanie ukrytego pola (takiego jak przedrostek "_", na przykład Spring) lub przyrostka z ".hidden") i sprawdzanie, czy istnieje, aby ustawić wartość na "niezaznaczone" lub "false" po stronie serwera. Szczegółowe informacje można znaleźć w kroku 3 specyfikacji formularza W3C: http://www.w3.org/TR/html5/forms.html#constructing-form-data-set – sehrope

+0

Jeszcze jedno pytanie: czy ważne jest wstawienie ukrytego elementu wejściowego gdziekolwiek w formularzu? – curious1

Powiązane problemy