Element wejściowy stylizacji po niepowodzeniu sprawdzania poprawności

Jak mogę dopasować komponent po sprawdzeniu poprawności?

Mam następujące pole tekstowe:

<p:inputText id="username" value="#{authController.username}" autocomplete="off" required="true" />

Próbuję zmienić kolor po:

<p:commandButton id="submit" value="Login" actionListener="#{authController.login}" update=":growl" />

Zostało kliknięte.

Znalazłem toteren i próbowałem wdrożyć sposób, który został tam pokazany.

To moja klasa:

public class RequiredFieldValidationListener implements SystemEventListener {

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

    public void processEvent(SystemEvent event) throws AbortProcessingException {
        if (event.getSource() instanceof UIInput) {
            UIInput source = (UIInput) event.getSource();

            if (!source.isValid()) {
                String originalStyleClass = (String) source.getAttributes().get("styleClass");
                source.getAttributes().put("data-originaStyleClass", originalStyleClass);
                source.getAttributes().put("styleClass", originalStyleClass + " ui-input-invalid");
            } else {
                String originalStyleClass = (String) source.getAttributes().get("data-originaStyleClass");
                source.getAttributes().put("styleClass", originalStyleClass);
            }
        }
    }
}

Rejestruję to wfaces-config.xml tak jak:

<application>
    ---

    <system-event-listener>
        <system-event-listener-class>com.edfx.adb.web.event.RequiredFieldValidationListener</system-event-listener-class>
        <system-event-class>javax.faces.event.PostValidateEvent</system-event-class>
        <source-class>javax.faces.component.html.HtmlInputText</source-class>                       
    </system-event-listener>

</application>

Próbowałem też użyć

@ListenersFor({ @ListenerFor(sourceClass = HtmlInputText.class, systemEventClass = PostValidateEvent.class) })
public class RequiredFieldValidationListener implements SystemEventListener {

}

Spodziewałem się, że gdy pole wejściowe jest nieprawidłowe, w moim przypadku puste, klasa css ui-input-invalid zostanie dodana do atrybutu klasy komponentu. Ale to nie działa. Faktem jest metodaprocessEvent nie działa w ogóle.

Co robię źle i jak mogę to osiągnąć?

questionAnswers(2)

yourAnswerToTheQuestion