2013-06-28 11 views
17

Sto utilizzando Spring MVC per un'applicazione Web. In un modulo, hoTag checkbox del modulo Spring: perché generare un elemento nascosto?

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

Quando la pagina viene visualizzata, il seguente codice HTML viene generato

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

Qualcuno sa lo scopo del tag nascosto? Cosa succederebbe se il tag di input nascosto fosse rimosso?

Grazie!

risposta

20

Il tag di input nascosto indica un campo che era originariamente parte del modulo. Quando viene inviato un modulo, il campo di input della casella di controllo viene inviato solo se ha un valore (cioè "selezionato"). Se non è selezionato, non viene inviato nulla. Il campo nascosto prefissato di sottolineatura sta usando per indicare che faceva parte del modulo, ma dovrebbe essere impostato come "non controllato/falso".

È possibile verificarlo creando un modulo HTML con un campo di controllo e inviandolo senza il campo selezionato.

Inoltre, per vedere come è fatto il check-out il codice sorgente per 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

Grazie mille per il vostro contributo! "Se non è selezionato, non viene inviato nulla."? Inviato dal browser? Vuoi dire che fa parte delle specifiche HTML? – curious1

+2

Sì, fa parte delle specifiche HTML. I valori deselezionati per le checkbox non vengono inviati dal browser al server al momento dell'invio del modulo. La soluzione generale consiste nell'avere un campo nascosto (come prefisso con "_" come Spring o suffisso con ".hidden") e verificare che esista per impostare un valore su "deselezionato" o "falso" sul lato server. Vedere il passaggio 3 per la specifica del modulo W3C per i dettagli: http://www.w3.org/TR/html5/forms.html#constructing-form-data-set – sehrope

+0

Un'altra domanda: è importante inserire l'elemento di input nascosto ovunque sul modulo? – curious1

Problemi correlati