Как применить фазелистенизер JSF2 после сборки viewroot? - PullRequest
6 голосов
/ 18 августа 2011

В моем приложении JSF2 у меня есть phaselistener, который должен быть выполнен до RENDER_RESPONSE, но после того, как JSF построил корень просмотра.

Во-первых, я зарегистрировал свой PhaseListener в face-config.Затем вызывается слушатель, но когда я выполняю beforePhase, getViewRoot().getChildren() все еще пуст.

Во-вторых, я нашел, как это сделать, добавив следующее на своих страницах xhtml:

<f:phaseListener type="be.application.PolicyController" />

Это прекрасно работает, но добавление этого на каждую из моих страниц было бы крайне утомительно.Поэтому я ищу возможность сделать это один раз для моего приложения.

Есть идеи, как это можно сделать?

Ответы [ 2 ]

7 голосов
/ 18 августа 2011

Зарегистрируйте прослушиватель системных событий для PreRenderViewEvent в face-config:

<?xml version="1.0" encoding="UTF-8"?>

<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
    version="2.0">

    <application>
        <system-event-listener>
            <system-event-listener-class>test.PreRenderViewListener</system-event-listener-class>
            <system-event-class>javax.faces.event.PreRenderViewEvent</system-event-class>
        </system-event-listener>
    </application>

</faces-config>

Пример прослушивателя:

public class PreRenderViewListener implements SystemEventListener {

    @Override
    public void processEvent(SystemEvent event) throws AbortProcessingException {
        UIViewRoot root = (UIViewRoot) event.getSource();
        System.out.println(root.getChildCount());
    }

    @Override
    public boolean isListenerForSource(Object source) {
        return true;
    }

}
0 голосов
/ 28 февраля 2012

с помощью

<f:phaseListener type="de.xxx.listener.HeaderControlPhaseListener" />

в шаблоне (facelets) у меня отлично работает. Или есть какие-то проблемы, о которых я не знаю ..? (Я ненавидел это face-config.xml в jsf и стараюсь полностью избежать этого в jsf2)

...