Bal*_*usC 10
你可以PhaseListener为此实现一个.您可以对它们进行编程以侦听您在重写方法中指定的特定JSF阶段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.
}
}
Run Code Online (Sandbox Code Playgroud)
为了得到它的运行,你需要将其注册为一个<phase-listener>在<life-cycle>一节的faces-config.xml文件.你可以有多个<phase-listener>s.
<lifecycle>
<phase-listener>com.example.RequestInterceptor</phase-listener>
</lifecycle>
Run Code Online (Sandbox Code Playgroud)
您可以指定PhaseId.ANY_PHASE在getPhaseId()让每一个JSF阶段运行阶段监听器(注意,不一定所有的人就一定会执行,这取决于请求类型).如有必要,您可以在前后阶段方法中获取当前阶段ID PhaseEvent#getPhaseId().
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());
}
}
Run Code Online (Sandbox Code Playgroud)
或者,Filter如果你想要一个更全局的钩子,那么a 应该同样有效(因此你对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.
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11508 次 |
| 最近记录: |