在我的工作中,我们开发了一个JSF 2应用程序。我需要创建一个侦听器bean,其中包含一个必须在每个页面请求上执行的方法。如何完成这项任务?
答案 0 :(得分:0)
您的问题的答案可以找到here。
这种方法至关重要:
public void beforePhase(PhaseEvent event) {
if (event.getPhaseId() == PhaseId.RENDER_RESPONSE) {
// Do here your job which should run right before the RENDER_RESPONSE.
}
}
在这里,您可以对每个生命周期阶段做出反应,并在所需的PhaseId中调用您的适当函数。我希望它有所帮助。
当我看到你使用JSF 2时,你也可以使用以下方法:
在xhtml页面中使用:
<f:event type="preRenderView" listener="#{bean.preRenderView}" />
并在bean中调用适当的方法:
public void preRenderView() {
// Do here your job which should run right before the RENDER_RESPONSE.
}
答案 1 :(得分:0)
一种方法是filter
。创建类:
public class MonitoringFilter implements Filter {
@Override
public void doFilter(ServletRequest _request, ServletResponse _response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)_request;
HttpServletResponse response = (HttpServletResponse)_response;
// your code here
chain.doFilter(_request, _response);
}
}
在 web.xml :
中注册 <filter>
<filter-name>monitoringFilter</filter-name>
<filter-class>xyz.MonitoringFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>monitoringFilter</filter-name>
<url-pattern>/*.jsf</url-pattern>
</filter-mapping>
(在url-pattern中设置正确的路径)。
答案 2 :(得分:0)
我解决了。起初我尝试过滤器,但它没有,因为在请求开始时调用过滤器,但那时FacesContext没有初始化,我需要因为我必须检索请求的URL。所以在那之后我尝试了阶段监听器,它的工作原理!在beforePhase()方法中,我监听PhaseId.RENDER_RESPONSE。谢谢大家的指导。