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?