PrimeFaces Ajax Listener não executado quando o atributo de processo é especificado para um componente diferente
Quando eu especificarprocess
atributo dep:ajax
tag, o ouvinte não é executado. Se eu omitir oprocess
atributo, o listener é chamado como esperado.
Aqui está o snippet da vista:
<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>
E controlador:
<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>
Eu anexei umphaseListener
para uma visão comANY_PHASE
PhaseIde aqui está o que eu observei.
Quando eu especificarprocess
atributo, o valor doinputToProcess a entrada é definida com sucesso para o controlador durante a fase Atualizar Modelo (sem exceção). Então oInvoke Application
eRender Response
fases são executadas, mas nenhum ouvinte é chamado. Uma coisa que notei é que a caixa de seleção não está definida no final. Mas, não há erros de conversão ou validação, porque como eu disse oUpdate Model
eInvoke Application
fases são executadas.
Se eu omitirprocess
atributo, aqui está o que eu vejo: o ouvinte é normalmente chamado durante oInvoke Application
fase (desdeimmediate
é falso por padrão) e, em seguida, `Render Response é executado. A caixa de seleção é configurada com sucesso.
Existe alguma explicação para esse tipo de comportamento?