Ich arbeite daran, eine Webseite zu erstellen und merke jetzt, dass ich die Befehlsschaltfläche zweimal drücken muss. Jede Befehlsschaltfläche hat das gleiche Problem, also dachte ich, ich würde hinzufügen und Aktion Listener auf einer von ihnen, um zu sehen, ob ich etwas sehen könnte.
%Vor%Die Backing Bean hat
%Vor%Das hilft leider. Es trifft erst nach dem zweiten Drücken auf meinen Haltepunkt. Ich vermute, dass irgendein Feld irgendwo die Validierung nicht besteht, aber ich hätte gerne eine Methode, um herauszufinden, was genau falsch läuft - warum brauche ich den zweiten Schub? Gibt es eine Option, die ich in Glassfish aktivieren kann, oder etwas anderes, wo ich einen Dump von Debug-Informationen betrachten kann? Ich kann den Dump ignorieren, bis alles stabil ist und dann sehen, was genau passiert, wenn ich den Knopf zum ersten Mal drücke.
Gibt es ein solches Werkzeug, das ich benutzen kann?
Das kann passieren, wenn eine übergeordnete Komponente der gegebenen <h:form>
von einer anderen Befehlsschaltfläche / Verknüpfung mit <f:ajax>
gerendert / aktualisiert wurde. Das angegebene Formular verliert dann seinen Ansichtszustand, den es erst nach dem ersten Senden des Formulars erhalten würde. Alle nachfolgenden Anmeldungen funktionieren dann auf die übliche Weise. Dies wird durch einen Fehler in der JSF-JS-API verursacht, der im JSF-Problem 790 beschrieben ist und im kommenden JSF 2.2 behoben wird .
Sie müssen die andere Befehlsschaltfläche / Verbindung mit <f:ajax>
korrigieren, um explizit die Client-ID der angegebenen <h:form>
in render
einzufügen.
Eine andere Möglichkeit besteht darin, dieses <f:ajax>
durch ein PrimeFaces <p:commandLink>
oder <p:commandButton>
zu ersetzen, sodass Sie die Client-ID aller Formulare nicht explizit einschließen müssen. PrimeFaces eigene JS API hat diesen Fix bereits eingebaut.
Ich stieß auf das gleiche Problem. Die Lösung war einfach: Anstatt actionListener und action zu verwenden, konvertieren Sie einfach die actionListener-Methode, um eine Zeichenfolge an die Stelle zurückzugeben, an der Sie navigieren möchten, und verwenden Sie sie als Methode für die Aktion (ohne actionListener).
Einfach ausgedrückt: only Verwenden Sie eine Aktion (verwenden Sie keinen actionListener in einem commandButton, der ein Formular sendet).
Tags und Links jsf primefaces