Ich habe ein Formular in JSF2 mit 2 Checkboxen (<h:selectBooleanCheckbox>
). Mindestens einer von ihnen sollte überprüft werden. Beide Überprüfungen sind auch in Ordnung, aber wenn keine überprüft wird, sollte ein Fehler auftreten.JSF2: Wie validiere ich zwei abhängige Checkboxen?
Diese Validierung sollte auch auf AJAX funktionieren, d. H. Wenn Benutzer ein-/auscheckt, sollte die Fehlermeldung verschwinden/erscheinen.
Also bin ich beide Kontrollkästchen an UISelectBoolean
Elemente gebunden und hinzugefügt Validator zu jedem. Im Validator prüfe ich den Wert des zweiten Kontrollkästchens, wenn es falsch ist und das aktuelle Kontrollkästchen ebenfalls auf "false" gesetzt ist, wird eine Fehlermeldung generiert. Smth mag:
if (newValue == false && secondCheckbox.getValue() == false) {
throw new ValidationException();
}
Problem ist, wenn der Benutzer Checkbox auf der Seite unchecks, während die anderen auch nicht markiert ist, dieser falsche Wert geht nicht auf das Modell, noch Ereignis UISelectBoolean.
Szenario:
- zunächst beide sind nicht markiert
- Benutzer prüft checkbox1.
newValue
isttrue
, so ist dies gültig, geht zu UISelectBoolean und Modell.- Benutzer deaktiviert checkbox1. Checkbox2 ist
false
,newValue
istfalse
, so dass eine Ausnahme ausgelöst wird. Aufgrund der fehlgeschlagenen Validierung wird dieserfalse
-Wert nicht an das Modell und nicht einmal an das UISelectBoolean-Element übergeben. - Benutzer überprüft checkbox2.
True
Wert geht an das Modell und UISelectBoolean. - Benutzer deaktiviert checkbox2. Checkbox1 ist auf der Seite noch nicht markiert, aber im Modell und UISelectBoolean ist immer noch
true
. Die Validierung ist also erfolgreich und es liegt keine Fehlermeldung vor. Auf der Seite sind beide Kontrollkästchen deaktiviert, aber im Modell checkbox1 ist immer nochtrue
.
Wie löst man ein solches Problem?
Jeder Grund, warum Sie '' nicht verwenden können? –
BalusC
Ja, wusste es nicht :) Danke! – amorfis
Kann ich zu hinzufügen? Sieht aus wie f: Ajax funktioniert nicht. –
amorfis