PrimeFaces Ajax Listener не выполняется, когда атрибут процесса указан для другого компонента

Когда я указываю атрибут processтега p:ajax, слушатель не выполняется. Если я опускаю атрибут process, то прослушиватель вызывается, как и ожидалось

Вот фрагмент представления:

<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}" />

И контроллер:

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

Я прикрепил phaseListenerк представлению сANY_PHASEPhaseId , и вот что я наблюдал.

Когда я указываю атрибут process, значение ввода inputToProcess успешно устанавливается контроллеру во время фазы обновления модели (исключение не возникает ). Затем Invoke Applicationи Render Responseфазы выполняются, но прослушиватель не вызывается.Одна вещь, которую я заметил, это то, что флажок не установлен в конце. Но ошибок преобразования или проверки нет, потому что, как я уже сказал, фазы Update Modelи Invoke Applicationвыполняются.

Если я опускаю атрибут process, вот что я вижу :прослушиватель обычно вызывается во время фазы Invoke Application(, поскольку immediateпо умолчанию является ложным ), а затем `Render Response выполняется. Флажок успешно установлен.

Есть ли объяснение такому поведению?

9
задан BalusC 23 April 2012 в 20:27
поделиться