Das Gestalten der Eingabekomponente nach der Überprüfung ist fehlgeschlagen

Wie kann ich eine Komponente formatieren, nachdem die Validierung fehlgeschlagen ist?

Ich habe folgendes Textfeld:

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

Ich versuche die Farbe nach dem zu ändern:

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

Angeklickt wird.

Ich habe das gefundenSeite? ˅ und versucht, den Weg zu implementieren, wurde dort gezeigt.

Das ist meine Klasse:

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);
            }
        }
    }
}

Ich registriere es infaces-config.xml wie:

<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>

Auch ich habe versucht zu nutzen

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

}

Ich hatte erwartet, dass, wenn das Eingabefeld ungültig ist, in meinem Fall leer, die CSS-Klasse ui-input-invalid zum Klassenattribut der Komponente hinzugefügt wird. Aber es funktioniert nicht. Ich glaube die MethodeprocessEvent wird überhaupt nicht ausgeführt.

Was mache ich falsch und wie kann ich das erreichen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage