2013-05-31 7 views
5

Ich lief in diesem Szenario.Welcher Wert wird von struts Checkbox-Tag gesendet, wenn das Kontrollkästchen deaktiviert ist

class MyForm extends IdSelectionForm { 
    private Boolean approveIt = true; 
    ..... 
} 

meine JSTL Form besteht aus

<html:checkbox property="approveIt" styleId="style1" value="true"/> 

Wenn ich Checkbox auswählen und abschicken. In struts action bekomme ich einen echten Wert für dieses Feld. Und wieder wenn ich es abnehme und abschicke. Dann bekomme ich auch wahren Wert. Ich frage mich, ob es etwas mit Standardwert ist. Sollte es bei der Deaktivierung von false überschrieben werden.

Antwort

5

Zunächst ist <html:checkbox> ein Struts-Tag, kein JSTL-Tag. Dieser Tag erzeugt einfach eine Standard-HTML-Eingabe vom Typ-Kontrollkästchen. Und HTML-Kontrollkästchen senden ihren Wert als Parameterwert, wenn sie überprüft werden, und senden keine Parameter, wenn sie deaktiviert sind.

Also, da der Standardwert des Formularfeldes wahr ist:

  • wenn das Kontrollkästchen aktiviert ist, wird es
  • auf true Struts gesetzt werden, wenn das Kontrollkästchen nicht markiert ist, wird es nicht wird von Struts auf alles gesetzt und behält somit seinen Standardwert bei: true

Der Standardwert der approveIt-Eigenschaft sollte false sein. Wenn das Kontrollkästchen deaktiviert ist, behält es seinen Standardwert (false) bei, der korrekt ist. Und wenn das Kontrollkästchen aktiviert ist, wird es auf "True" gesetzt, was ebenfalls korrekt ist.

2

Das value Attribut enthält den vom Tag verwendeten Wert und hat nichts mit checkbox state, wenn es checked oder nicht markiert ist.

Beim Senden werden nur angekreuzte Kontrollkästchen übergeben. Dann fängt Struts sie ab und setzt per Name entsprechende Bean-Eigenschaften.

Wenn Sie den Wert inline oder im Konstruktor initialisieren, werden nur die Kontrollkästchen checked aktualisiert, indem Sie einen bohneneigenschaftswert festlegen. Sie können den deaktivierten Status nicht aktualisieren.

Setzen Sie daher keinen Wert, bevor das Formular ausgefüllt wird. Wenn der Wert nicht festgelegt ist, behandelt Struts diesen Wert als false und entfernt checked aus dem Tag. Dies entspricht dem expliziten Festlegen des Werts auf false.

das entgegengesetzte Verhalten mit dem Wert true aber nicht Ankreuzfeld hat einen Zustand für die anderen Werte wie null anstatt true oder false der checked oder nicht markiert (ohne checked Attribut) in den Zustand des Kontrollkästchen entspricht.

2

Ich hatte das gleiche Problem. Das Problem blieb bestehen, auch nachdem die boolesche Variable auf false initialisiert wurde.

Das Problem war mein Umfang war session.

Nach Änderung des Bereichs auf request funktioniert alles wie erwartet.

Verwandte Themen