2

我有一个 JSF 页面,其中包含以下代码:

...
<f:event type="preRenderView" listener="#{page1.PreRenderViewEvent}"/> 
...

现在我需要在页面中而不是在Page1 类构造函数中注册侦听器(Page1.PreRenderViewEvent 方法) ......类似于:

...
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 本身的构造函数中完成这项工作(或者,更清洁,在 a 中@PostConstruct)。

4

1 回答 1

5

使用UIViewRoot#subscribeToViewEvent().

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

请注意,如果 bean 是在呈现响应阶段构建的,就像在 GET 请求期间发生的那样,这将为时已晚。您最好只在请求范围 bean 本身的构造函数中完成这项工作(或者,更清洁,在 a 中@PostConstruct)。

于 2013-02-26T13:51:14.577 回答