# Validator Message in JSF



## abcde (19. Okt 2011)

Hallo,

ich versuche die ValidatorMessage durch validatorMessage manuell zu ändern. Bei zwei von 3 Feldern funktioniert das auch. Beim 3. Leider nicht und ich seh nicht was ich anders mach.

meine JSF
[XML]<h:form>

        ISBN:       <h:inputText id="isbn" value="#{books.isbn}" required="true" validatorMessage="ISBN has to be a number"/><br/>
        Title:      <h:inputText id="title" value="#{books.title}" required="true" validatorMessage="Title has to be a word between 2 and 20 characters"/><br/>
        Author:     <h:inputText id="author" value="#{books.author}" required="true" validatorMessage="Author has to be a word between 2 and 20 characters"/><br/>
        Quantity:   <h:inputText id="quantity" value="#{books.quantity}" required="true"/><br/>
        <h:commandButton id="insert" action="#{books.insertBook()}" value="insert" />
    </h:form><br/>[/XML]

Die zugehörige MessageBean:


```
@Size(min = 10, max = 10)
    private int isbn;
    @Size(min = 2, max = 20)
    private String title;
    @Size(min = 2, max = 20)
    private String author;
    private int quantity;
```

Das Ergebnis:

Insert A New Book

ISBN: 0sfd 
Title: s
Author: s
Quantity: 0

    j_idt3:isbn: Bei '0sfd' muss es sich um eine Zahl mit einer oder mehreren Ziffern handeln.
    Title has to be a word between 2 and 20 characters
    Author has to be a word between 2 and 20 characters 

Sieht jemand warum mir die Fehlermeldung nicht richtig angezeigt wird? Clear und Re-Build hab ich schon gemacht.


----------



## nillehammer (20. Okt 2011)

Das liegt am Datentyp int von isbn. Die anderen sind Strings. Dein Size-Constraint greift garnicht, weil JSF intern schon merkt, dass keine Zahl eingegeben wurde. Aber frag mich nicht, wie man die Message des JSF-internen Validators überschreibt....


----------



## mjustin (24. Okt 2011)

nillehammer hat gesagt.:


> Das liegt am Datentyp int von isbn. Die anderen sind Strings. Dein Size-Constraint greift garnicht, weil JSF intern schon merkt, dass keine Zahl eingegeben wurde. Aber frag mich nicht, wie man die Message des JSF-internen Validators überschreibt....



Auf Stackoverflow habe ich dieses Beispiel gefunden (für JSF 2):

@NotNull(message = "{person.null.name}", groups = PersonNew.class)
        private String name;

jsf 2.0 - JSF 2.0 + Bean Validation + more validation groups in one form - Stack Overflow


----------



## nillehammer (24. Okt 2011)

> @NotNull(message = "{person.null.name}", groups = PersonNew.class)
> private String name;


Das Beispiel passt in diesem Fall nur leider nicht. Hier soll nicht die Message einer Annotation geändert werden. Es soll die Message eines Fehlers geändert werden, der überhaupt nicht durch eine Annotation abgefangen wird (nämlich der Versuch der Zuweisung eines Strings zu einem int).


----------



## abcde (5. Nov 2011)

Hallo,

danke für eure Antworten. 

Ich habe die @Size Annotation durch eine @Min() Annotation ersetzt, die für Typ int gedacht ist. Damit löse ich das zweite Problem, dass die @Size Annotation keine Auswirkung hatte. Die angepasste Fehlermeldung wird auch angezeigt, wenn ein Verstoß wegen der Annotation vorliegt.

Bisher habe ich Leider noch nicht gefunden, wie ich die interne Fehlermeldung überschreiben kann. Mein Problem ist die Sprache. Das komplette Program ist auf Englisch und ich kann mich nicht drauf verlassen, dass alle, die es anschauen deutsch verstehen. Lässt sich evtl. die Sprache umstellen? Meine IDE ist englisch nur mein System ist auf deutsch installiert.

Viele Grüße

abcde


----------



## nillehammer (5. Nov 2011)

Das Stichwort ist Locale. Diese bestimmt die Sprache der angezeigen Texte, das Format von Zahlen, Daten etc. Webanwendungen verwenden einen ausgeklügelten Mechanismus, um diese zu ermitteln. Dafür werten Sie i.d.R den Language Header des Requests aus. Ich selbst programmiere kein JSF, deswegen kann ich Dir hier keinen fertigen Weg zeigen. Aber als Einstieg in das Thema ist vielleicht folgender kurzer Artikel hilfreich: JSF Application : Locale


----------

