2009-04-20 6 views
1

ここでは、標準のSEAM設定を使用しています... hibernateを使用する検証システムがあります。Seam/Hibernateバリデーターリスナー

基本的には、ユーザーがhtml入力に値を入力すると、seamは休止状態の検証を使用して入力した値を検証します。

私の問題を除いてほとんどの部分がうまくいきます:各フィールドに検証結果を記録する必要があります。良い方法を見つけることができません。理想的には、シーム/ハイバネーションの検証システムと、検証結果を記録するだけですが、これを行う方法がないと言うことができます。

過去にこのようなことをしたことがありますか?いくつかの厄介な回避策がありますが、私はそれをきれいにすることを好むでしょう。

我々はコンテキストのために今起こっているプロセスのジャスト概要:

1)利用者は、フィールドの値 2に入る)のonblur値はアヤックス(a4jで設定されています。この時点でサポート)バリデータの火をページに表示されている検証エラーが発生した場合は、divが再レンダリングされます

step2で起こったかったことは、「ValidationListener」またはこれと同様のものが呼び出されて検証の結果を記録する。誰でも助けることができる場合

ありがとう:

答えて

2

oをあなたはorg.jboss.seam.validationFailedイベントを観察する方法があるビーンを作成することによってそれを行うことができるはずです。この方法では、必要なロギングを行うことができます。

@Name("validationObserver") 
public class ValidationObserver() { 

    @Observer("org.jboss.seam.validationFailed") 
    public void validationFailed() { 
     //Do stuff 
    } 
} 

あなたはエラーが何であったかを記録したい場合はfacesMessagesのか、おそらく休止状態の検証の枠組み自体を調べる必要がありますので、validationFailedイベントは、任意のパラメータを渡すことはありません。

0

私は検証のためにHibernateのみを使用していますが、Damoが推奨するようにvalidationFailed()メソッドでHibernate ClassValidatorを使用できます。
例:

public <T> InvalidValue[] validateWithHibernate(T object) { 
     ClassValidator<T> validator = new ClassValidator(object.getClass()); 
     InvalidValue[] invalidValues = validator.getInvalidValues(object); 
     return invalidValues; 
    }