PrimeFaces Ajax Listener wird nicht ausgeführt, wenn das Prozessattribut für eine andere Komponente angegeben wird
Wenn ich spezifiziereprocess
Attribut vonp:ajax
Tag, der Listener wird nicht ausgeführt. Wenn ich das weglasseprocess
Attribut, dann wird der Listener wie erwartet aufgerufen.
Hier ist das Ansichts-Snippet:
<code><p:messages id="messages" /> <h:inputText id="inputToProcess" value="#{controller.inputToProcess}" /> <p:selectBooleanCheckbox id="testCheckbox" > <p:ajax event="change" process="inputToProcess" update="messages @this inputToUpdate" listener="#{controller.processChecked}" /> </p:selectBooleanCheckbox> <h:inputText id="inputToUpdate" value="#{controller.inputToUpdate}" /> </code>
Und Controller:
<code>@javax.faces.bean.ManagedBean @javax.faces.bean.ViewScoped public class Controller implements Serializable { private String inputToProcess; private String inputToUpdate; //getters and setters public void processChecked(javax.faces.AjaxBehaviorEvent e) { // doing some stuff here } } </code>
Ich habe eine beigefügtphaseListener
zu einer Ansicht mitANY_PHASE
PhaseIdUnd hier ist, was ich beobachtet habe.
Wenn ich spezifiziereprocess
Attribut, der Wert derinputToProcess Die Eingabe wurde während der Phase "Modell aktualisieren" erfolgreich auf den Controller gesetzt (es tritt keine Ausnahme auf). Dann ist dieInvoke Application
undRender Response
Phasen werden ausgeführt, aber es wird kein Listener aufgerufen. Eine Sache, die mir aufgefallen ist, ist, dass das Kontrollkästchen am Ende nicht gesetzt ist. Es gibt aber keine Konvertierungs- oder Validierungsfehler, da wie gesagt dieUpdate Model
undInvoke Application
Phasen werden ausgeführt.
Wenn ich weglasseprocess
Attribut, hier ist was ich sehe: Der Listener wird normalerweise während derInvoke Application
Phase (seitimmediate
ist standardmäßig false) und dann wird `Render Response ausgeführt. Checkbox ist erfolgreich gesetzt.
Gibt es eine Erklärung für dieses Verhalten?