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