# Validierung mit Java Server Faces



## Gast (27. Jan 2008)

Hallo,

Folgendes Problem:

Die Fehlernachricht wird nicht korrekt angezeigt

Anmerkung:
Debug zeigt das  "validateUserName" aufgerufen wird. Bei "Test" wird auch NICHT auf die naechste Seite gegangen.

Wenn das Tag <h:messages> drin ist sieht man das dort eine "leere Zeile" angezeigt wird!

Also was ist an dem Zusammenbau der Nachricht falsch oder an den Message Tags etc.


2. Problem:

Wenn required =false ist, wird bei JSF bei einem "Null" Value KEINE Validierung durchgefuerht. Kann man irgendwo einstellen, dass auch dann validiert wird ? Waere fuer mich sehr sehr wichtig !!!

Anmerkung:

Wenn Ihr keinen Fehler entdecken teilt mir das bitte auch mit, dann schau ich mir mal die anderen Technologien an...


Danke im vorraus fuer eure Muehe...

Verwendete Technik:

JSF 1.2 +  Spring + Spring Web Flow

Der Code

JSP:


```
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<html>
<head>
    <title>Benutzerverwaltung</title>
</head>

<body>
<f:view>    

    <h:form id="inputForm">

    <h:messages layout="table" showDetail="true" style="color: red;" />

    <h:outputText value="UserName:"/><h:message for="userName"/><h:inputText id="userName" value="#{user.userName}" validator="#{user.validateUserName}"/>
       
        <h:commandButton action="commit" value="OK"/>
    </h:form>
</f:view>
</body>
</html>
```

Die Variable User:

```
import javax.faces.context.FacesContext;
import javax.faces.component.UIComponent;
import javax.faces.validator.ValidatorException;
import javax.faces.application.FacesMessage;

public class UserViewImpl implements UserView {

    private Long _identifier;
    private String _userName;

    public UserViewImpl() {
        this(null, "");
    }

    public UserViewImpl(Long identifier, String userName) {
        _identifier = identifier;
        _userName = userName;
    }

    public Long getIdentifier() {
        return _identifier;
    }

    public String getUserName() {
        return _userName;
    }

    public void setUserName(String userName) {
        _userName = userName;
    }

    public void validateUserName(FacesContext facesContext, UIComponent componentToValidate, Object valueObject) {
        String value = (String) valueObject;
        if (value.equals("Test")) {
            FacesMessage facesMessage = new FacesMessage("Fehler bei userName");
            throw new ValidatorException(facesMessage);
        } 
    }
}
```


----------



## maki (28. Jan 2008)

Deinem ersten Problem würde ich versuchen mit FacesTrace (googeln) auf die Spur zu kommen.

Dein zweites Problem verstehe ich nicht...


> Wenn required =false ist, wird bei JSF bei einem "Null" Value KEINE Validierung durchgefuerht. Kann man irgendwo einstellen, dass auch dann validiert wird ? Waere fuer mich sehr sehr wichtig !!!


Was sollte denn dann validiert werden?
Null?


----------



## Gast (Thread Starter (28. Jan 2008)

> Was sollte denn dann validiert werden?
> Null?



Genau das  :wink: 

Die Jsp soll fuer verschiedene Anwendungen eingesetzt werden. Problem bei einigen ist z.B. ein Geburtsdatum ein Pflichtfeld bei anderen nicht. 

Dieses moechten wir NICHT direkt in die JSP schreiben muessen z.B. mit 
	
	
	
	





```
if (...) Then ZeigeRequiredfeld else zeigeNichtRequiredFeld
```
.

Der aus UNSERER Sicht bessere Weg ist die Benutzung der Spring Config, um die fuer den Kunden jeweils benoetigten Validator konfiguerien zu koennen.

Des wegen ist die "Bevormundung" bei null Ausdruecken nicht zu validieren fuer uns nicht nachvollziehbar und eine unnoetige Einschraenkung durch JSF...


Bzgl. FacesTrace:

Danke fuer den Hinweis werde das gleich mal ausprobieren...


----------



## maki (28. Jan 2008)

Du kannst EL Expressions einsetzen, um denn wert von required zu setzen


----------



## klaus1 (9. Jan 2009)

Frage:

Ich würde gerne einen Validator verwenden direkt bei den input tags innerhalb der Form.
Nun kann ich bei Value ja direkt ein Property der BackingBean angeben. ich möchte jedoch gleich die input tags, die die Setter auswerten validieren.
Meine Frage: Was muss ich bei values angeben, um dann wirklich schon alle inputs die validiert werden sollen, zu erhalten? 
Hätte einen hidden input tag geschrieben um die validate methode aufzurufen. 
Die Reihenfolge spielt leider keine Rolle, da ich dachte zuerst werden die input tags abearbeitet, danach mein zuletzt angegebener hidden input, um gleich die properties zu überprüfen, die gesetzt wurden...
Klappt leider nicht so wie ich mir das dachte.
Jemand eine Idee?
danke,
Klaus


----------

