Приемник Ajax PrimeFaces не выполняется, когда атрибут процесса указан для другого компонента
Когда я указываюprocess
атрибутp:ajax
тег, слушатель не выполняется. Если я опущуprocess
атрибут, то слушатель вызывается, как и ожидалось.
Вот фрагмент кода:
<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>
И контроллер:
<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>
Я прикрепилphaseListener
для просмотра сANY_PHASE
PhaseIdи вот что я заметил.
Когда я указываюprocess
атрибут, значениеinputToProcess вход успешно установлен на контроллере на этапе обновления модели (исключений не возникает). ТогдаInvoke Application
а такжеRender Response
фазы выполняются, но слушатель не вызывается. Одна вещь, которую я заметил, это то, что флажок не установлен в конце. Но нет ошибок преобразования или проверки, потому что, как я уже сказал,Update Model
а такжеInvoke Application
фазы выполнены.
Если я опущуprocess
атрибут, вот что я вижу: слушатель обычно вызывается во времяInvoke Application
фаза (сimmediate
по умолчанию - false), и затем выполняется `Render Response. Флажок успешно установлен.
Есть ли объяснение этому виду поведения?