muss die Befehlsschaltfläche zweimal drücken

8

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?

    
Ilan Tal 30.05.2012, 10:56
quelle

5 Antworten

13

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.

%Vor%

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.

    
BalusC 30.05.2012, 13:31
quelle
0

füge event="onclick" in deinem p:commandbutton
hinzu Ich schätze, das wird es klären.

    
Addicted 30.05.2012 10:59
quelle
0

oder Sie können diese Eigenschaft ajax="false" in Ihrem commandButton

hinzufügen %Vor%     
Farnsbert 25.01.2013 06:00
quelle
0

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).

    
Mithel 03.09.2014 13:47
quelle
0

Bitte überprüfen Sie Ihre Bindung mit Bean.

Bean-Felder sollten String oder nicht primitiv sein.

    
Shahid 06.02.2015 10:24
quelle

Tags und Links