8
我想知道JSF中是否有攔截器(就像我們在Spring中使用的一樣),以及如何實現它?JSF中的攔截器
我想知道JSF中是否有攔截器(就像我們在Spring中使用的一樣),以及如何實現它?JSF中的攔截器
您可以爲此執行PhaseListener
。您可以將它們編程爲在specific JSF phase上進行收聽,您可以在覆蓋的getPhaseId()
方法中指定。您可以通過beforePhase()
和afterPhase()
方法攔截前後階段事件。
下面的例子監聽的渲染響應階段:
public class RequestInterceptor implements PhaseListener {
@Override
public PhaseId getPhaseId() {
return PhaseId.RENDER_RESPONSE;
}
@Override
public void beforePhase(PhaseEvent event) {
// Do your job here which should run before the render response phase.
}
@Override
public void afterPhase(PhaseEvent event) {
// Do your job here which should run after the render response phase.
}
}
爲了得到它的運行,你需要將其在faces-config.xml
文件的<life-cycle>
部分登記爲<phase-listener>
。您可以有多個<phase-listener>
s。
<lifecycle>
<phase-listener>com.example.RequestInterceptor</phase-listener>
</lifecycle>
可以在getPhaseId()
指定PhaseId.ANY_PHASE
讓聽者階段對每一個JSF階段運行(注意,不一定個個就一定會執行,這取決於請求類型)。如有必要,您可以通過PhaseEvent#getPhaseId()
獲取前後階段方法中的當前階段ID。
public class PhaseDebugger implements PhaseListener {
@Override
public PhaseId getPhaseId() {
return PhaseId.ANY_PHASE;
}
@Override
public void beforePhase(PhaseEvent event) {
System.out.println("Before phase " + event.getPhaseId());
}
@Override
public void afterPhase(PhaseEvent event) {
System.out.println("After phase " + event.getPhaseId());
}
}
或者,一個Filter
應該一樣好,如果你想有一個更全局鉤子(因此你不是在JSF請求/響應準確感興趣,你不需要從FacesContext
任何東西)。
@WebFilter("/*")
public class RequestInterceptor implements Filter {
@Override
public void init(FilterConfig config) {
// Initialize global variables if necessary.
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
// Do your job here which should run before the request processing.
chain.doFilter(request, response);
// Do your job here which should run after the request processing.
}
@Override
public void destroy() {
// Cleanup global variables if necessary.
}
}
不可能存在一對一的映射。看看[PhaseListeners](http://docs.oracle.com/javaee/6/api/javax/faces/event/PhaseListener.html)。 – McDowell 2012-01-03 09:03:57