2010-03-19 19 views
14

Wenn das Problem der Validierung einer Eigenschaft in einer JSF2-Anwendung auftritt, gibt es zwei Hauptansätze.Bean-Validierung VS JSF-Validierung

Definition der Validierung auf der ManagedBean

eine Annotation mit
@ManagedBean 
public class MyBean { 
    @Size(max=8) 
    private String s; 

    // Getters setters and other stuff. 
} 

oder auf der JSF-Seite erklärt:

<h:inputText value="#{myBean.s}"> 
    <f:validateLength maximum="8"/> 
</h:inputText> 

Es kommt vor, dass ich nicht für keine von ihnen entscheiden kann. Die erste ist nett, weil sie etwas Code von den jsf-Seiten entfernt (was immer gut ist, da diese Seiten per Definition nicht augenfreundlich sind), macht es aber schwieriger, auf einen Blick zu sehen, was mit der Seite beim Überprüfen der jsf-Datei passiert .

Welcher ist Ihrer Meinung nach klarer? Schöner? Besser?

Antwort

17

Ich würde für die Validierung auf der ManagedBean pumpen, dies entfernt Logik aus der JSF die VIEW in Modelansicht Controller. und sollte die JSF für die Anzeige des Modells verantwortlich halten. Wenn dies auch für die verwaltete Bean gilt, wird sichergestellt, dass die Validierung überall dort angewendet wird, wo sie aktualisiert wird. Das ist mehr TROCKEN (Wiederhole dich nicht).

+1

Noch in den meisten Fällen in gui zu wiederholen, zum Beispiel Beschränkung der maximalen Länge oder Größe oder anderer visueller Werte auf dieselben Werte wie bei der Validierung. – djmj

+0

@David Waters, sind beide Bean-Validierung und JSF-Validierung im selben Lebenszyklus oder in verschiedenen Lebenszyklen auftritt, ich meine, ist JSF-Validierung vor Bean-Validierung? und ist die jsf-Validierung auf der Client-Seite erfolgt? –

+0

@MahmoudSaleh - Hallo Mahmoud, kann ich vorschlagen, Ihre Frage als eine Frage, kein Kommentar, Sie werden eine viel bessere Reaktion und Antworten von einer viel breiteren Palette von Menschen bekommen. –

3

Richfaces können Sie sie zusammen verwenden. Siehe <rich:graphValidator> (und beanValidator auch).

Diese Tags sagen: "Wenden Sie die JSF-Validierung basierend auf javax.validation (oder Hibernate-Validator) -Regeln an".

+0

sind beide Bean-Validierung und JSF-Validierung im gleichen Lebenszyklus oder in verschiedenen Lebenszyklen auftritt, ich meine, ist JSF-Validierung vor Bean-Validierung? und ist die jsf-Validierung auf der Client-Seite erfolgt? –

4

Es gibt einen weiteren Vorteil des Ansatzes von managedBean. Wenn die von der JSF angezeigten Informationen auch über einen Web-Service (WS) verfügbar sind, kann der tatsächliche Validierungscode in eine Validierungsklasse faktorisiert und sowohl für die JSF als auch für die WS verwendet werden, um sicherzustellen, dass alle Informationen im System gültig sind.

0

Ich könnte JSF-Validierung bevorzugen, weil ich im Rahmen der Bean-Validierungen keine Fehlermeldungen zu Ressourcenbündeln ausgeben kann. Zum Beispiel können Sie dies nicht tun

Da "Kompilierkonstanten können nur Primitive und Strings sein". Es gibt Arbeit, um die konstanten Nachrichten zu definieren, aber das wird hässlich aussehen.

1

@ user1730904 können Sie Nachrichten in einer Ressourcenbündeldatei definieren, wie im Bean Validierungsspezifikationsdokument erläutert. Die erforderlichen Schritte sind einfach:

  1. eine Datei ValidationMessages_xx_XX.properties in einigen Classpath Ordner mit dem Namen erstellen (z src/main/resources/). Wo xx_XXes_ES ist, en_US usw. Wenn der Inhalt könnte sein: field.message=The number of digits must be less or equal than {max}.
  2. dann den Wert innerhalb des Annotation-Bean-Attribut verwenden: @Size(max = 20, message="{field.message}")
Verwandte Themen