2012-04-03 7 views
0

Ich mache eine Web-Anwendung mit Spring 3.1.0.RELEASE, JSF 2.x, JPA 2 mit Hibernate Provider. Die Anwendung läuft auf Tomcat 6.X.Bohnen Validierung viel lang Nachricht fehlgeschlagen

Die Web-App kann in verschiedenen Sprachen angezeigt werden: en, es, fr.

Ich verwende die Bean-Validierung in meinen Entitäten. Hibernate Validator ist der Anbieter, Version 4.2.0.Final.

ich den folgenden Code in einer Einheit haben:

@Email 
    @Size(max=255) 
    @Column(name = "email_ceo", length = 255) 
    private String emailCeo; 

@NotEmpty 
    @OrderBy("position ASC") 
    @OneToMany(cascade = ALL, mappedBy = "site", fetch = FetchType.EAGER) 
    private List<SiteLanguage> langs; 

ich mit der Ausnahme wie folgt aus:

try { 
      siteService.createSite(newSite); 
     } catch (ConstraintViolationException ex) { 
      final FacesContext facesContext = FacesContext.getCurrentInstance(); 
      for (ConstraintViolation<?> cv : ex.getConstraintViolations()) { 
       facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, cv.getMessage(), null)); 
      } 
     } 

I zeigen die Fehlermeldung in der Vorlage von <h:messages />

mit Wie bekomme ich die übersetzte Nachricht, weil cv.getMessage() immer die englische Nachricht zurückgibt?

Für die E-Mail funktioniert es gut, ich habe die Nachricht in guter Sprache.

Es gibt eine zweite Sache ist, verstehe ich nicht:

Warum @NotEmpty eine ConstraintViolationException wirft und @Email nicht?

Vielen Dank.

Antwort

0
  1. Gebietsschema verwenden. Die Art und Weise, wie wir es gemacht haben, ist im Grunde die Locale-Strings in beiden Sprachen in einer Tabelle und basiert auf dem verwendeten Locale (en, fr).

  2. Fangen Sie alle Ausnahmen mit catch Exception e dann schauen Sie sich den Typ an, der geworfen wird. Es fängt es ab und setzt die Fangklausel fort. Die erste ausgelöste Ausnahme wird den try-Block verlassen.

@Email

Feld/Eigenschaft. Muss eine Saite sein.

Überprüfen Sie, ob die angegebene Zeichenfolge eine gültige E-Mail-Adresse ist.

http://docs.jboss.org/hibernate/validator/4.0.1/api/org/hibernate/validator/constraints/Email.html

+0

Sorry, ich bin mir nicht sicher, ob Sie meine Frage beantworten. –

0

Statt cv.getMessage() verwenden, cv.getMessageTemplate(), wäre es in der Constraint Nachrichtenvorlage return definiert, zB. {javax.validation.constraints.NotNull.message}. Wenn Sie eine ResourceBundle-Datei (mit einer Bean-Validierungsimplementierung oder einer eigenen Implementierung) haben, können Sie Nachrichten in einer ausgewählten Sprache abrufen.

@Email ist keine Integritätsbedingung für Bean Validation, daher wird es nicht von JSF 2.0 ausgelöst. Schreiben Sie Ihre eigene E-Mail-Einschränkung (oder umbrechen Sie diese, die vom Hibernate-Validator bereitgestellt wird), damit sie von Bean Validation erkannt wird.