Когда я указываю атрибут 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_PHASE
PhaseId , и вот что я наблюдал.
Когда я указываю атрибут process
, значение ввода inputToProcess успешно устанавливается контроллеру во время фазы обновления модели (исключение не возникает ). Затем Invoke Application
и Render Response
фазы выполняются, но прослушиватель не вызывается.Одна вещь, которую я заметил, это то, что флажок не установлен в конце. Но ошибок преобразования или проверки нет, потому что, как я уже сказал, фазы Update Model
и Invoke Application
выполняются.
Если я опускаю атрибут process
, вот что я вижу :прослушиватель обычно вызывается во время фазы Invoke Application
(, поскольку immediate
по умолчанию является ложным ), а затем `Render Response выполняется. Флажок успешно установлен.
Есть ли объяснение такому поведению?