Program nasłuchujący Ajax PrimeFaces nie jest wykonywany, gdy atrybut procesu jest określony dla innego komponentu

Kiedy określęprocess atrybutp:ajax tag, słuchacz nie jest wykonywany. Jeśli pominęprocess atrybut, wtedy słuchacz jest wywoływany zgodnie z oczekiwaniami.

Oto fragment kodu widoku:

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

I kontroler:

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

Załączam aphaseListener do widoku zANY_PHASE PhaseIdi oto co zaobserwowałem.

Kiedy określęprocess atrybut, wartośćinputToProcess wejście jest pomyślnie ustawione na sterownik podczas fazy aktualizacji modelu (nie występuje wyjątek). A późniejInvoke Application iRender Response fazy są wykonywane, ale nie jest wywoływany żaden słuchacz. Zauważyłem, że pole wyboru nie jest ustawione na końcu. Ale nie ma błędów konwersji ani walidacji, ponieważ, jak powiedziałemUpdate Model iInvoke Application fazy są wykonywane.

Jeśli pominęprocess atrybut, oto co widzę: słuchacz jest zwykle wywoływany podczasInvoke Application faza (odimmediate domyślnie jest fałszywe), a następnie wykonywana jest „Odpowiedź renderująca”. Pole wyboru zostało pomyślnie ustawione.

Czy istnieje jakieś wyjaśnienie tego rodzaju zachowania?

questionAnswers(1)

yourAnswerToTheQuestion