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)
*/
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
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
Un'altra domanda: è importante inserire l'elemento di input nascosto ovunque sul modulo? – curious1