Frage Spring form checkbox tag: Warum ein verstecktes Element generieren?


Ich verwende Spring MVC für eine Webanwendung. Auf einem Formular habe ich

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

Wenn die Seite gerendert wird, wird der folgende HTML-Code generiert

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

Kennt jemand den Zweck des versteckten Etiketts? Was passiert, wenn das versteckte Eingabe-Tag entfernt wird?

Vielen Dank!


17
2018-06-28 15:18


Ursprung


Antworten:


Das ausgeblendete Eingabe-Tag soll ein Feld anzeigen, das ursprünglich Teil des Formulars war. Wenn ein Formular gesendet wird, wird das Kontrollkästchen-Eingabefeld nur gesendet, wenn es einen Wert hat (d. H. "Geprüft"). Wenn es nicht ausgewählt ist, wird nichts gesendet. Der Unterstrich mit vorangestelltem versteckten Feld zeigt an, dass es Teil des Formulars war, sollte aber standardmäßig auf "un-checked / false" gesetzt werden.

Sie können dies testen, indem Sie ein HTML-Formular mit einem Kontrollkästchenfeld erstellen und es ohne das aktivierte Feld senden.

Um zu sehen, wie es gemacht wird, schauen Sie sich den Quellcode an 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)
*/

20
2018-06-28 15:45