我有一个JSF页面,其中包含以下代码:
...
<f:event type="preRenderView" listener="#{page1.PreRenderViewEvent}"/>
...
现在我需要注册侦听器(Page1)。preenderviewevent方法)不在页面中,而是在Page1类构造函数中…比如:
...
UIViewRoot root = FacesContext.getCurrentInstance().getViewRoot();
root.getListenersForEventClass(javax.faces.event.PreRenderViewEvent.class).add ....
...
如何完成这段代码?
谢谢。
使用UIViewRoot#subscribeToViewEvent()
context.getViewRoot().subscribeToViewEvent(PreRenderViewEvent.class, new MySystemEventListener);
注意,如果bean是在呈现响应阶段构造的,就像在GET请求期间发生的那样,那就太晚了。您最好在请求作用域bean本身的构造函数中(或者更清楚地说,在@PostConstruct
中)完成这项工作。