NCi*_*ter 2 event-handling jsf-2 viewroot
我有一个包含以下代码的 JSF 页面:
...
<f:event type="preRenderView" listener="#{page1.PreRenderViewEvent}"/>
...
Run Code Online (Sandbox Code Playgroud)
现在我需要在页面中而不是在Page1 类构造函数中注册侦听器(Page1.PreRenderViewEvent 方法)......类似于:
...
UIViewRoot root = FacesContext.getCurrentInstance().getViewRoot();
root.getListenersForEventClass(javax.faces.event.PreRenderViewEvent.class).add ....
...
Run Code Online (Sandbox Code Playgroud)
我如何完成此代码?
谢谢。
使用UIViewRoot#subscribeToViewEvent().
context.getViewRoot().subscribeToViewEvent(PreRenderViewEvent.class, new MySystemEventListener);
Run Code Online (Sandbox Code Playgroud)
请注意,如果 bean 是在渲染响应阶段构建的,就像在 GET 请求期间发生的那样,这将为时已晚。您最好只在请求作用域 bean 本身的构造函数中完成这项工作(或者,更简洁,在 a 中@PostConstruct)。