Добавление <f: event... программно
У меня есть страница JSF, которая содержит следующий код:
...
<f:event type="preRenderView" listener="#{page1.PreRenderViewEvent}"/>
...
Теперь мне нужно зарегистрировать слушатель (метод Page1.PreRenderViewEvent) НЕ на странице, а внутри конструктора класса Page1... Что-то вроде:
...
UIViewRoot root = FacesContext.getCurrentInstance().getViewRoot();
root.getListenersForEventClass(javax.faces.event.PreRenderViewEvent.class).add ....
...
Как я могу завершить этот код?
Благодарю.
1 ответ
Решение
Использование UIViewRoot#subscribeToViewEvent()
,
context.getViewRoot().subscribeToViewEvent(PreRenderViewEvent.class, new MySystemEventListener);
Обратите внимание, что было бы слишком поздно, если компонент создается во время фазы ответа рендеринга, как это происходит во время запросов GET. Вы бы лучше просто проделали ту же самую работу внутри конструктора самого бина области действия запроса (или, чище, в @PostConstruct
).