2012-04-13 14 views
1

Ich habe durch benutzerdefinierte Validator definiert (implementiert javax.faces.validator.Validator Schnittstelle und in Faces-Config definiert). Ich brauche meine benutzerdefinierte Komponente, um diesen Validator innerhalb meines Komponentencodes (Renderer-Klasse) aufzurufen. Ich möchte meine xhtml so sauber wie möglich machen und wollen nicht durch die EinbettungAngeben von Validator in JSF 1.2 benutzerdefinierte Komponente

<f:validator validatorId='xx' /> 

in meinem Komponententag den Validator separat in meinem xhtml aufzurufen. Genau wie wie ich

getConvertedValue(FacesContext context, UIComponent component, Object submittedValue) 

in meinem Renderer Umwandlung zu behandeln implementieren kann, kann ich ähnlich etwas tun Validierung innerhalb Renderer zu behandeln?

Dank

Antwort

2

Dieser an der UI Komponentenebene zu tun ist, nicht auf der Renderer Ebene. Ihre benutzerdefinierte Eingabekomponente muss sicherlich bereits UIInput erweitern, sonst haben Sie viele andere (zukünftige) Probleme und/oder Sie verschwenden Zeit beim Schreiben von wiederholtem Code. Wenn Ihre benutzerdefinierte Eingabekomponente UIInput erweitert, können Sie einfach die Validator durch die ererbte UIInput#addValidator()-Methode hinzufügen, zum Beispiel den Konstruktor der Komponente.

public MyCustomInputComponent() { 
    addValidator(new MyCustomValidator()); 
} 

Die bereits implementierten UIInput#validate() Methode wird alles tun, die Konvertierung, Validierung und Mitteilung automagically Handhabung.

+0

Danke. Genau das habe ich gesucht. Nur neugierig, warum getConvertedValue() im Renderer für die Konvertierung freigegeben wurde, aber nicht für die Validierung Validator hinzufügen? – phewataal

+0

Die Konvertierung ist mehr ein Rendering-Job (findet während der Codierung von HTML-Markup und beim Decodieren von HTTP-Parametern statt) und liegt logisch in der Verantwortung des 'Renderers'. Die Validierung findet während des Renderings nicht statt und ist spezifischer für Eingabekomponenten der 'UIInput'-Familie. Die Validierung findet während der Validierungsphase statt. Die Validierung beeinflusst nicht die Werte für die Eingabe/Ausgabe. Sie können mehr als einen Validator haben, aber nicht mehr als einen Converter. Nun, ich denke, dass diese JSF-Designentscheidung durchaus Sinn macht. – BalusC

+0

Um die Frage nicht zu verlängern, muss ich den Validator dynamisch hinzufügen/bestimmen (zB US vs. Canadian Zipcode Validator basierend auf vorherigem inputText Wert (erfasst State/Provine "Informationen). Wie kann ich addValidator() dynamisch aufrufen? – phewataal