# JSF 2 / Mehrere Validatoren



## mandreo (31. Jan 2010)

Guten Abend,

Ich möchte eine Email-Adresse validieren.

Im Model wird der String mit Metadatenvalidierung validiert:

*Account.java*

```
import org.hibernate.validator.constraints.Email;

...

@NotNull
@Email
private String email;
```

Nun habe ich in der BackingBean noch einen eigenen Validator, der nachsehen soll, ob die Email in der Datenbank schon vorhanden ist:

*AccountBean.java*

```
public void emailValidate(FacesContext ctx, UIComponent comp, Object value)
	throws ValidatorException{
		
	if(value instanceof String) {
		String strValue = (String) value;
			
		Account account = accountService.findByEmail(strValue);
			
		if(account != null) {
			FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR,
					"Email existiert schon", null);
			throw new ValidatorException(msg);
		}
	}
}
```

In der xhtml Datei binde ich meinen eigenen Validator ein:

[XML]
<hutputLabel for="email" value="Email"/>
<h:inputText id="email" value="#{accountBean.account.email}" validator="#{accountBean.emailValidate}"/>
[/XML]

Jetzt wird leider nur mein eigener Validator aufgerufen und die Annotation @Email wird nicht mehr beachtet.

Kann ich beide Validatoren aufrufen oder muss ich einen Validator erstellen, der alles macht?


----------



## mandreo (2. Feb 2010)

Okay hat sich erledigt!

Wenn ich meinen eigenen Validator eingebunden habe, dann wird die Email doch mit dem eigenen und mit der Annotation validiert.

Das Problem ist einfach, dass der Hibernate Email Constaint nicht richtig funktioniert.

Wenn man "a@b" eingibt, validiert Hibernate die Emailadresse als korrekt. Verrückte Sache.

Ich habe es immer nur in dieser Form getestet "a@b", aber wenn man beipsielsweise "falscheemail" eingibt kommt die Hibernate Message.

Kann diese Fehlfunktion eventuell noch wer bestätigen (Die Bibliothek kommt von GlassFishv3), dann schreib ich ein Bugreport.

Grüße,
mandreo


----------



## maki (2. Feb 2010)

a@b könnte doch eine gültige eMail Addresse sein, oder hab ich dich falsch verstanden?


----------



## mandreo (2. Feb 2010)

Das überrascht mich jetzt.

Ich dachte immer im Domain-Teil muss auch eine Top-Level-Domain stehen.


----------



## maki (2. Feb 2010)

admin@localhost ist doch genauso eine mögliche, gültige eMail Addresse 

Im Endeffekt sind diese Methoden alle nciht sicher, eine sichere Überprüfung wäre sehr aufwändig...


----------

