2010-11-22 17 views
12

JSR 303検証を使用するSpringバックエンドを使用してGWTアプリケーションを開発しています。アプリケーションはオフラインになり、代わりにブラウザのHTML5/Gearsデータベースを使用できます。GWT JSR 303クライアントの認証

クライアント検証を実装する最良の方法は何ですか?これまで私はgwt検証フレームワーク(http://code.google.com/p/gwt-validation/)を見つけましたが、もはやアクティブではないようです。

ありがとうございます!

UPDATE:

JSR 303ビーン検証(link here)をサポートする新しいGWTの公式プロジェクトがあります。 IMOこれは、プロジェクトが完成したらすぐに行く方法です。

答えて

13

この検証フレームワークは、クライアント側とサーバー側のデータ入力検証フレームワークです。その役割は、クライアントからサーバーに渡されるデータのビジネスルール準拠を確実にすることです。

この検証フレームワークでは、「JSR 303:Bean Validation」仕様を実装したGWT検証プロジェクトが使用されています。

アイデアは、データ転送オブジェクト(DTO)のクラスとフィールドをJSR303アノテーションで修飾して、その妥当性ルールを記述することです。

  1. 各データ転送オブジェクトは、独自の検証注釈で装飾する必要があります。
  2. 各サーバー側サービスの実装では、クライアントから受け取るデータ転送オブジェクトを検証する必要があります。クライアント側では

、あなたは(あなたのクラスパスにjarファイルと一緒に)追加する必要がありますプロジェクトでGWT-の検証を使用するようにGWTモジュールのXMLファイルには

<inherits name="com.google.gwt.validation.Validation" /> 

のDTOを実装することを確認com.google.gwt.validation.client.interfaces.IValidatable

は、サーバー上のクライアント側で使用

com.google.gwt.validation.client.interfaces.IValidator.validateProperty((T) model, propertyName); 

に検証するには側の使用

com.google.gwt.validation.server.ServerValidator 

これを正しく設定する作業は少しですが、その後は完全に動作します。

+0

これはまさに私が探していたものです! 答えで探していたリンクはhttp://code.google.com/p/gwt-validation/です。 –

+1

JSR 303をサポートするGWTの公式プロジェクトは、GWT2.4以降で正常に動作し、IValidatableを実装する必要はありません。http://code.google.com/p/google-web-toolkit/wiki/BeanValidation。クライアント側とサーバー側の両方が、ドメインオブジェクトまたはDTO上で1つのアノテーションでカバーされていました。 – koma

+0

これは死んだプロジェクトですか?私はそれを使用したいが、私はそれを信頼できるかどうかわからない! – HaveAGuess

4

まだ使用していませんが、GWT 2.1にはいくつかの検証サポートが含まれています。

ShowCase exampleを確認してください。

+0

感謝を検証します。この例は、ユーザーの入力を手動で検証するカスタムセルを作成する方法を示しています。私が避けたいのは、クライアントとサーバーに検証を2回書かなければならないということです。 –

+0

@ Javier、どこでも検証を実行するためにデータの妥当性について十分気になっているなら、サーバー側で検証を行うべきです。クライアント側の検証は、ユーザーの時間と労力を節約するうえで便利な機能です。 – sarnold

+0

ポインタのおかげで、私はそれを試してみます –

6

GWT 2.5はちょうどこのために新しい機能を持っています https://developers.google.com/web-toolkit/doc/latest/DevGuideValidation

それは、Hibernateバリを使用しています。

1)AbstractGwtValidatorFactoryを拡張して、Beanを適用する必要があります。 :

public final class SampleValidatorFactory extends AbstractGwtValidatorFactory { 

    /** 
    * Validator marker for the Validation Sample project. Only the classes and groups listed 
    * in the {@link GwtValidation} annotation can be validated. 
    */ 
    @GwtValidation(Person.class) 
    public interface GwtValidator extends Validator { 
    } 

    @Override 
    public AbstractGwtValidator createValidator() { 
    return GWT.create(GwtValidator.class); 
    } 
} 

2)これをgwtに追加します。XML:

<inherits name="org.hibernate.validator.HibernateValidator" /> 
<replace-with 
    class="yourpackage.SampleValidatorFactory"> 
    <when-type-is class="javax.validation.ValidatorFactory" /> 
</replace-with> 

3)あなたの豆の答えカルロスため

Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); 
Set<ConstraintViolation<Person>> violations = validator.validate(person); 
+0

おっと、この回答に似たリンクで質問が更新されました。 – rjdkolb