添加

时间:2013-02-26 13:44:22

标签: jsf-2 event-handling viewroot

我有一个包含以下代码的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 ....
...

我如何完成此代码?
感谢。

1 个答案:

答案 0 :(得分:3)

使用UIViewRoot#subscribeToViewEvent()

context.getViewRoot().subscribeToViewEvent(PreRenderViewEvent.class, new MySystemEventListener);

请注意,如果在呈现响应阶段期间构造,那么这将是太晚了,就像在GET请求期间发生的那样。你最好在请求作用域bean本身的构造函数中完成这项工作(或者,更清楚,在@PostConstruct中)。