当我指定标签的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
}
}
我使用PhaseIdphaseListener
将 a 附加到视图,这就是我观察到的。ANY_PHASE
当我指定process
属性时,inputToProcess输入的值在更新模型阶段成功设置为控制器(不发生异常)。然后执行Invoke Application
andRender Response
阶段,但不调用任何侦听器。我注意到的一件事是最后没有设置复选框。但是,没有转换或验证错误,因为正如我所说,Update Model
andInvoke Application
阶段已执行。
如果我省略process
属性,这是我看到的:通常在Invoke Application
阶段期间调用侦听器(因为immediate
默认情况下为 false),然后执行 `Render Response。复选框设置成功。
这种行为有什么解释吗?