2009-11-13 150 views
2

您好在JSF我需要執行一些操作時,用戶的每個請求結束。我需要某種攔截器,但我不知道該怎麼做。我需要幫助。由於如何攔截請求結束?

回答

1

我建議BalusC的博客:http://balusc.blogspot.com/2006/09/debug-jsf-lifecycle.html

本文將向您展示如何攔截JSF lifecycle和調試信息。這也可以讓你找到你的請求結束的地方。

如果你在這裏發佈了一些代碼,它也可以幫助我們找出真正的問題所在。 下面是你需要實現調試周期的代碼的摘錄:

package mypackage; 

import javax.faces.event.PhaseEvent; 
import javax.faces.event.PhaseId; 
import javax.faces.event.PhaseListener; 

public class LifeCycleListener implements PhaseListener { 

    public PhaseId getPhaseId() { 
     return PhaseId.ANY_PHASE; 
    } 

    public void beforePhase(PhaseEvent event) { 
     System.out.println("START PHASE " + event.getPhaseId()); 
    } 

    public void afterPhase(PhaseEvent event) { 
     System.out.println("END PHASE " + event.getPhaseId()); 
    } 

} 
1

如果你想擁有FacesContext可用,那麼最好的地方是一個PhaseID.RENDER_RESPONSE裏面PhaseListenerafterPhase。例如:

public class MyPhaseListener implements PhaseListener { 

    public PhaseId getPhaseId() { 
     return PhaseId.RENDER_RESPONSE; 
    } 

    public void beforePhase(PhaseEvent event) { 
     // No operation here. 
    } 

    public void afterPhase(PhaseEvent event) { 
     FacesContext context = event.getFacesContext(); 
     // Do your thing here with the FacesContext. 
    } 

} 

如果您不需要FacesContext,那麼最好的地方是一個Filter裏面的線chain.doFilter(request, response)後。例如:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) { 
    chain.doFilter(request, response); 
    // Do your thing here. 
} 
+1

嘿嘿很有趣我是如何提到你的網站上的一篇文章,然後你回答這個帖子aswell =) – 2009-11-13 17:23:15