基本上,我需要在RENDER_RESPONSE阶段之后调用一个方法。我试过这个:相位监听只听,不回传
<f:phaseListener type="com.examples.MyPhaseListener"/>
上面的监听程序一直在监听ajax调用。我试过
rendered="#{!facesContext.postback}"
但它不适用在这里我猜。所以,我想这是在这篇文章中提到Is it possible to disable f:event type="preRenderView" listener on postback?:
public void beforePhase(PhaseEvent pe) {
if (!FacesContext.getCurrentInstance().isPostback()) {
//do nothing
}
}
public void afterPhase(PhaseEvent pe) {
if (!FacesContext.getCurrentInstance().isPostback()) {
if (pe.getPhaseId() == PhaseId.RENDER_RESPONSE) {
//call a method
}
}
}
这是工作,但是否有其他方式的初始响应后禁用监听器? 我也尝试过preRenderComponent,但是它在RENDER_RESPONSE阶段之前被调用,它看起来好像它不是呈现响应,直到方法出栈(基本上它不是异步)。所以我觉得与在PostConstruct中调用它们相比,SystemEvent没有像preRenderView和preRenderComponent那么多优点。
“不是对Ajax的请求”,“不回发”是不一样的,你需要哪一种?另外,“异步”是什么意思? JSF是作为一个servlet实现的,所有的JSF代码假定它将在请求处理线程中运行,所以与JSF异步交互不是用途。 – meriton 2012-03-15 22:23:37
你是什么意思“调用PostConstruct中的事件”? – meriton 2012-03-15 22:26:34
Ajax请求隐式总是回发。但并非所有回发都必须是Ajax请求。 – BalusC 2012-03-15 22:30:55