# JSF Validierung eigene Meldungen



## Guest (14. Feb 2008)

Hallo,

hab folgendes Problem. Hab mein Passwort auf required = true gesetzt. Nun wenn man keines eingibt erschreibt folgende Fehlermeldung:

indexassword: Validierungs-Fehler: Wert wird benötigt.

Wie kann ich diese Nun durch eine Eigene ersetzen? zB durch:

Sie haben vergessen das Passwort einzugeben.


----------



## Reeny (14. Feb 2008)

Hi,

ich weiß, dass das mit MyFaces (ab Version 1.2) geht. Dort gibt es ein Attribut zu dem Feld (<h:inputText> ... ?), dass heißt "requiredMessage".


```
<h:inputText id="myInput" value="#{bean.field}" required="true" requiredMessage="Schallala"/>
```


----------



## Gast (14. Feb 2008)

und wie ist das beim normalen JSF?


----------



## Guest (14. Feb 2008)

Hallo,

du kannst in der _faces-config.xml_ die properties-Datei definieren, in der die Meldungen stehen.


```
<application>
    ...
    <message-bundle>org.example.bundle.Messages</message-bundle>
    <locale-config>
        <default-locale>en</default-locale>
        <supported-locale>de</supported-locale>
    </locale-config>
</application>
```

Die properties-Datei _/org/example/bundle/Message.properties_ muss dann folgende Schlüssel besitzen:


```
javax.faces.component.UIInput.CONVERSION                =
javax.faces.component.UIInput.REQUIRED                  =
javax.faces.component.UISelectMany.INVALID              =
javax.faces.component.UISelectOne.INVALID               = 
javax.faces.converter.BigDecimalConverter.DECIMAL       =
javax.faces.converter.BigIntegerConverter.BIGINTEGER    =
javax.faces.converter.BooleanConverter.BOOLEAN          =
javax.faces.converter.ByteConverter.BYTE                =
javax.faces.converter.CharacterConverter.CHARACTER      =
javax.faces.converter.DateTimeConverter.DATE            = 
javax.faces.converter.DateTimeConverter.DATETIME        = 
javax.faces.converter.DateTimeConverter.PATTERN_TYPE    = 
javax.faces.converter.DateTimeConverter.TIME            = 
javax.faces.converter.DoubleConverter.DOUBLE            = 
javax.faces.converter.FloatConverter.FLOAT              = 
javax.faces.converter.IntegerConverter.INTEGER          = 
javax.faces.converter.LongConverter.LONG                = 
javax.faces.converter.NumberConverter.CURRENCY          = 
javax.faces.converter.NumberConverter.NUMBER            = 
javax.faces.converter.NumberConverter.PATTERN           = 
javax.faces.converter.NumberConverter.PERCENT           = 
javax.faces.converter.STRING                            = 
javax.faces.validator.DoubleRangeValidator.MAXIMUM      = 
javax.faces.validator.DoubleRangeValidator.MINIMUM      = 
javax.faces.validator.DoubleRangeValidator.NOT_IN_RANGE = 
javax.faces.validator.DoubleRangeValidator.TYPE         = 
javax.faces.validator.LengthValidator.MAXIMUM           = 
javax.faces.validator.LengthValidator.MINIMUM           = 
javax.faces.validator.LongRangeValidator.MAXIMUM        = 
javax.faces.validator.LongRangeValidator.MINIMUM        = 
javax.faces.validator.LongRangeValidator.NOT_IN_RANGE   = 
javax.faces.validator.LongRangeValidator.TYPE           = 
javax.faces.validator.NOT_IN_RANGE                      =
```

Diese Variante ist lt. _JSF The Complete Reference_ die richtige Wahl. Dort ist ab S. 137ff. auch die Bedeutung der einzelnen Schlüssel beschrieben (findest aber aufgrund des Namens, durch probieren oder im Inet auch selbst raus ^^). Hat zudem den Vorteil, dass man so die Mehrsprachigkeit sehr bequem und zentral, analog zur Lokalisierung mit den Resource-Files, verwalten kann.

Gruß
fkh

PS: Das sind jetzt nur die Standardschlüssel. Für eigene Validatoren musst du natürlich eigene Schlüssel definieren ^^


----------



## freez (8. Mai 2008)

Ist zwar schon etwas älter, der Beitrag, aber ich habe dazu noch eine Frage:



> PS: Das sind jetzt nur die Standardschlüssel. Für eigene Validatoren musst du natürlich eigene Schlüssel definieren ^^



Wie geht das? bei google & co habe ich keine sinnvollen Informationen gefunden.


----------

