In meiner JSF 2-basierten Anwendung habe ich ein Formular, das (neben anderen UI-Komponenten) einige Kontrollkästchen enthält.Nach Validierung Fehler nachfolgende Ajax-Anfragen erhalten Werte von UI-Komponenten und nicht von Beans
Auf den Kontrollkästchen habe ich ajax Anfragen registriert, die ausgelöst werden, wenn sie überprüft werden. Die Ajax-Anfragen aktualisieren nur den Wert eines anderen Kontrollkästchens in der Backing-Bean. Als Ergebnis wird auch das andere Kontrollkästchen aktiviert (wenn es erneut gerendert wird - da es den aktualisierten Wert von der Backing Bean in der Renderantwortphase benötigt).
Dies funktioniert gut, bis das gesamte Formular übermittelt und Validierungsfehler auftreten. Dann funktionieren die Ajax-Anfragen immer noch und ändern den Wert für die Backing-Bean, aber in der Phase des erneuten Renderns des aktualisierten Kontrollkästchens wird der Wert nicht von der Backing-Bean, sondern von einem zwischengespeicherten Wert aus einer ComponentStateHelper
-Klasse übernommen.
Soweit ich verstehe, wird dies für das neue Feature von JSF 2 verwendet, um nur partielle Änderungen am Komponentenbaum zu speichern.
Was ich nicht verstehe, ist: Wie steht das mit der Validierungsphase? Warum gibt es einen Wert im Cache in der StateHelper
Klasse für meine Checkbox, wenn die Validierung Fehler gefunden hat?
Vielen Dank für Ihre Antwort. Ich habe deine omififaces lib bereits in mein Projekt aufgenommen (für die 'FullAjaxExceptionHandlerFactory'). Es war also einfach, den 'ResetInputAjaxActionListener' in meine Datei' faces-config.xml' aufzunehmen. Aber dies wird nur in der 'InvokeApplicationPhase' aufgerufen, die nicht von meiner AJAX-Anfrage betroffen ist. Meine Ajax-Anfrage wird ausgelöst durch eine '' und dort durch ''. Aber ich werde mir das genauer ansehen. Ich habe deinen Vorschlag schnell ausprobiert. –
Jens
Es ist nicht getroffen? Bist du sicher? Möglicherweise müssen Sie den Server nach dem Bearbeiten von faces-config neu starten. – BalusC
Ich habe es neu gestartet und ich habe die Quelle der Omnifaces hinzugefügt und einen Haltepunkt gesetzt, um zu sehen, ob es überhaupt getroffen wird. Es wird bei regulären Anfragen getroffen, aber nicht bei der Ajax-Anfrage, die durch die Auswahl der Checkbox ausgelöst wird. – Jens