Primefaces - commandButton funktioniert nicht

8

Ich habe ein Problem mit commandButton, es funktioniert nur, wenn der Typ submit ist. Kann jemand einen Blick darauf werfen und mich wissen lassen, ob es dafür eine Lösung gibt? Der untenstehende Code ist sehr einfach und hat die Aufgabe zu illustrieren, was ich brauche. Die Methode test () wird nicht ausgeführt. Die Methode runSubmit wird erfolgreich ausgeführt.

Ich brauche, dass die Testmethode ohne Submit ausgeführt wird, da die Originalseite Validierungen hat, die während des submit ausgeführt werden, die Methode test () muss ohne submit ausgeführt werden, da es sich um eine vorbereitende Operation vor dem submit handelt.

Ich benutze PrimeFaces 4.0, JDK 7, Tomcat 6 und JSF 2.0 (Apache), aber ich denke, dass es auch in Mojarra passiert.

%Vor% %Vor%

Vielen Dank Andre

    
Andre 02.11.2013, 00:41
quelle

3 Antworten

31

Was ist los?

Was Sie bekommen, ist korrektes Verhalten. In PrimeFaces funktioniert der Button mit type="button" genauso wie in Basic HTML - es verursacht keine Anfrage. Als PrimeFaces Benutzerhandbuch wird gesagt:

  

Drucktasten werden verwendet, um benutzerdefiniertes JavaScript auszuführen, ohne dass ein   Ajax / Nicht-Ajax-Anfrage . Um eine Drucktaste zu erstellen, geben Sie als "Schaltfläche" ein.

%Vor%

Wenn Sie mit Bean "sprechen" möchten, müssen Sie type="submit" verwenden (was standardmäßig in p: commandButton ist). Jedoch ... im Gegensatz zu Submit-Schaltflächen Verhalten in HTML, in PrimeFaces solche Einreichung erzwingt keine Umleitung auf neue Seite, aber die gesamte Kommunikation wird von zugrunde liegenden AJAX-Anfragen behandelt werden.

Daher wird nur die zweite Schaltfläche die Methode von beans ausführen:

%Vor%

Was wollten Sie wahrscheinlich bekommen?

Wenn Sie nicht Ihr gesamtes Formular an Bean senden möchten, können Sie den Umfang der Komponenten begrenzen, die mit dem Attribut "process" von p: commandButton:

verarbeitet werden %Vor%

Mit der folgenden Bean werden Sie den Unterschied sehen:

%Vor%

Wenn Sie keine ausgeführten Komponenten in der Konsole beschränken, erhalten Sie:

%Vor%

... und mit Komponenten, die nur auf process="@ this" beschränkt sind, erhalten Sie nur:

%Vor%

Ich hoffe, das hilft.

    
ppawel 03.11.2013 22:32
quelle
10

Manchmal fügt die Lösung einfach immediate="true" hinzu, sie ändert den Punkt in JSF lifecyle, in dem die Bean-Aktion ausgelöst wird.

Richard P. 01.09.2014 11:16
quelle
-3

Bitte überprüfen Sie Ihre Bindung mit Bean.

Bean-Felder sollten String oder nicht primitiv sein.

    
Shahid 06.02.2015 10:18
quelle

Tags und Links