2012-04-03 81 views
0

我正在做一個Web應用程序使用Spring 3.1.0.RELEASE,JSF 2.x,JPA 2與Hibernate Provider。該應用程序在Tomcat 6.X上運行。豆驗證mutli lang消息失敗

網絡應用程序可以用不同的語言顯示:en,es,fr。

我在我的實體中使用了bean驗證。 Hibernate Validator是提供者,版本4.2.0.Final。

我已經在實體以下代碼:

@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; 

予處理異常這樣的:

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)); 
      } 
     } 

我通過使用<h:messages />

顯示在模板中的錯誤消息我如何獲得翻譯的信息,因爲cv.getMessage()總是返回英文信息?

對於電子郵件,它工作正常,我有良好的語言信息。

還有第二件事,我不明白:

爲什麼@NotEmpty拋出一個ConstraintViolationException和@Email不?

謝謝。

回答

0
  1. 使用語言環境。我們過去這樣做的方式是,基本上在表中使用任何一種語言的語言環境字符串,並基於使用的語言環境(en,fr)抓取它。

  2. catch Exception e捕獲所有異常,然後查看所拋​​出的類型。它會按順序捕捉並繼續捕捉條款。所以,拋出的第一個異常將退出try塊。

@Email

字段/屬性。需要是一個字符串。

檢查指定的字符串是否爲有效的電子郵件地址。

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

+0

對不起,我不確定你是否回答我的問題。 – 2012-04-04 13:41:36

0

相反cv.getMessage()的使用cv.getMessageTemplate(),它會在約束消息模板定義的回報,例如。 {} javax.validation.constraints.NotNull.message。如果您有ResourceBundle文件(隨Bean Validation實現提供或您自己提供),那麼您可以使用所選語言查看消息。

@Email不是Bean Validation的內置約束,所以它不會被JSF 2.0觸發。編寫你自己的@Email約束(或者包裝一個由Hibernate Validator提供的約束),所以它將被Bean驗證識別。