2009-04-20 18 views
1

Wir verwenden ein Standard-SEAM Setup hier ... komplett mit dem Validierungssystem, das dem Ruhezustand verwendet.Seam/Hibernate Validator Zuhörer

Im Allgemeinen, was geschieht, ist ein Anwender einen Wert in ein HTML-Eingabe eintritt und Naht validiert den Wert, den sie unter Verwendung des Validierungs Hibernate eingegeben.

Funktioniert in den meisten Fällen gut, außer hier ist mein Problem: Wir müssen die Ergebnisse der Validierung auf jedem Feld aufzeichnen und ich kann nicht einen guten Weg, um es zu tun ... im Idealfall würde es durch die Kommunikation mit die Naht/Validierungssystem überwintern und Aufzeichnung nur die Ergebnisse Validierung aber soweit ich es sagen kann, ist nicht ein Weg, dies zu tun?

Hat jemand etwas wie dies in der Vergangenheit getan? Es gibt ein paar hässliche Arbeit, aber ich würde es lieber sauber machen.

Nur ein kurzer Überblick über den Prozess, die wir für Kontext gerade jetzt passiert:

1) Benutzer gibt Feldwert 2) onblur Wert mit Ajax (a4j gesetzt: Unterstützung) an dieser Stelle der Validierer Feuer und das div wird neu gerendert. Wenn Validierungsfehler aufgetreten sind, sind sie jetzt auf der Seite

zu sehen. Was ich gerne bei Schritt 2 geschehen würde, ist ein 'ValidationListener' oder etwas ähnliches, das uns erlauben würde notieren Sie die Ergebnisse der Validierung.

Dank, wenn jemand zu helfen, ist in der Lage: o

Antwort

2

Sie sollten sie tun können, indem Sie eine Bean zu schaffen, die eine Methode, um das org.jboss.seam.validationFailed Ereignis beobachtet hat. Diese Methode kann dann die gewünschte Protokollierung durchführen.

@Name("validationObserver") 
public class ValidationObserver() { 

    @Observer("org.jboss.seam.validationFailed") 
    public void validationFailed() { 
     //Do stuff 
    } 
} 

Die validationFailed Ereignis passieren keine Parameter so dass Sie die FacesMessages oder möglicherweise der Hibernate Validation Framework selbst wenn Sie aufnehmen möchten befragen müssen, was der Fehler war.

0

ich Sie nur Hibernate für die Validierung, können Sie den Ruhezustand ClassValidator im validationFailed() -Methode verwenden, wie von Damo empfohlen.
Beispiel:

public <T> InvalidValue[] validateWithHibernate(T object) { 
     ClassValidator<T> validator = new ClassValidator(object.getClass()); 
     InvalidValue[] invalidValues = validator.getInvalidValues(object); 
     return invalidValues; 
    }