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?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage