基本上,我需要在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