Cross-Component-Validation mit JSF

Ono Sendai

Grünschnabel
Hallo,
beschäftige mich gerade mit der Validierung durch eine eigene Validator-Methode in der Backing-Bean. Ich habe 3 <h:inputSecret> Komponenten, die letzte ist an die Validator-Methode gebunden.

Ich bin soweit, dass die Validator Methode aufgrufen wird, allerdings ist mir noch nicht klar, wie ich auf die Werte der anderen Komponenten zugreifen kann.

Beispiel:
Code:
<h:inputSecret id="altesPW" value="#{changePW.passwortAlt}" required="true"/>		
<h:inputSecret id="neuesPW" value="#{changePW.passwortNeu}"  required="true"/>	
<h:inputSecret id="neuesPW2" value="#{changePW.passwortNeu2}" validator="#{changePW.pwValidate}" required="true"/>

Methode in der Backing-Bean:
Code:
	public void pwValidate(FacesContext fc, 
			UIComponent component, Object value) throws ValidatorException {
		
		
		passwortNeu = passwortNeu.trim();
		
		if (StringTools.empty(passwortAlt)) {
			fc.addMessage(null, new FacesMessage("Bitte geben Sie das alte Passwort ein.") );
		}

		if (StringTools.empty(passwortNeu)) {
			fc.addMessage(null, new FacesMessage("Bitte geben Sie das neue Passwort ein.") );
		}

		if (!passwortNeu2.equals(passwortNeu)) {
			fc.addMessage(null, new FacesMessage("Die neuen Passwörter stimmen nicht überein.") );
		}

		if ((passwortNeu.length() > 10)||(passwortNeu2.length() > 10)) {
			fc.addMessage(null, new FacesMessage("Das Passwort darf nicht länger als 10 Zeichen sein.") );
		}
		throw new ValidatorException(new FacesMessage("Fehler!"));
	}

Es kracht beim Zugriff auf passwortNeu, da die Eigenschaft der Bean zum Zeitpunkt der Validierung noch nicht gesetzt wurde.
Der Wert von neuesPW2 ist in dem übergebenen value Object, aber wie komme ich nun an die Werte der Komponenten "altesPW" und "neuesPW" ?
 
Des Rätsels Lösung:

Code:
		Object pwAlt = ((UIOutput) component.findComponent("altesPW")).getValue();
		Object pwNeu = ((UIOutput) component.findComponent("neuesPW")).getValue();

		if( pwAlt instanceof String && pwNeu instanceof String && value instanceof String) {
		String alt  = (String)pwAlt;
		String neu  = (String)pwNeu;
		String neu2 = (String) value;

...
}

Man muss über die übergebene Komponente an den Komponentenbaum und kann dann die Werte der anderen Komponenten auslesen.
 

Neue Beiträge

Zurück