2012-04-03 8 views
0

私はSpring 3.1.0.RELEASE、JSF 2.x、JPA 2 with Hibernate Providerを使ってWebアプリケーションをやっています。アプリケーションはTomcat 6.X上で動作します。Beans validation mutl lang message fail

web-appはさまざまな言語で表示できます:en、es、fr。

私は自分のエンティティでBean検証を使用します。 Hibernate Validatorはプロバイダ4.2.0.Finalです。

私はエンティティに次のコードを持っている:私は<h:messages />

を使用して、テンプレートにエラーメッセージを表示

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

:私はこのような例外を処理

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

cv.getMessage()は常に英語のメッセージを返すので、翻訳されたメッセージをどのように取得しますか?

電子メールの場合はうまくいきますが、私は良い言葉でメッセージを持っています。

第二のものがありますが、私は理解していない:

@NotEmptyがConstraintViolationExceptionをスローなぜ@Emailはありませんの?

ありがとう。

答えて

0
  1. ロケールを使用します。これまで行ってきたやり方は基本的には、テーブル内のいずれかの言語のロケール文字列を持ち、使用されたロケール(en、fr)に基づいてロケール文字列を取得します。

  2. すべての例外をcatch Exception eでキャッチし、スローされるタイプを確認します。それは順番にそれをキャッチし、catch節から続行します。したがって、最初にスローされた例外はtryブロックを終了します。

    フィールド/プロパティ@email

。文字列にする必要があります。

指定された文字列が有効なメールアドレスかどうかを確認してください。

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

+0

申し訳ありません私はあなたの質問に答えているかわかりません。 –

0

代わりのcv.getMessageは()cv.getMessageTemplate()を使用し、それは例えば、制約メッセージテンプレートで定義されて戻ってきます。 {javax.validation.constraints.NotNull.message}。 ResourceBundleファイル(Bean Validationの実装で提供されています)をお持ちの場合は、選択した言語でメッセージを取得できます。

@EmailはBean Validationビルトイン制約ではないため、JSF 2.0ではトリガーされません。独自の@Email制約を書く(またはHibernate Validatorによって提供されたものをラップする)ので、Bean検証によって認識されます。