2010-11-22 8 views
12

Ich entwickle eine GWT-Anwendung mit einem Spring-Backend, das JSR 303-Validierung verwendet. Die Anwendung kann offline gehen und stattdessen die HTML5/Gears-Datenbank des Browsers verwenden.GWT JSR 303 Client-Validierung

Was ist der beste Weg, um die Client-Validierung zu implementieren? Bisher habe ich gwt-validation framework gefunden (http://code.google.com/p/gwt-validation/) aber es scheint, dass es nicht mehr aktiv ist.

Danke!

UPDATE:

Es gibt ein neues GWT offizielles Projekt JSR 303 Bean Validation (link here) zu unterstützen. IMO das ist der Weg zu gehen, sobald das Projekt reif genug ist.

Antwort

13

Unser Validierungsframework ist ein Client- und serverseitiges Validierungsframework für die Dateneingabe. Seine Rolle besteht darin, die Einhaltung der Geschäftsregeln von Daten sicherzustellen, die von den Clients an den Server übergeben werden.

Das Validierungsframework verwendet das GWT Validation-Projekt, das die Spezifikation "JSR 303: Bean Validation" implementiert.

Die Idee ist, Datentransferobjekte (DTO) Klassen und Felder mit JSR303 Annotationen zu dekorieren, um ihre Gültigkeitsregeln zu beschreiben.

  1. Jedes Datentransferobjekt muss mit eigenen Validierungsanmerkungen versehen sein.
  2. Jede serverseitige Dienstimplementierung muss Datenübertragungsobjekte validieren, die sie vom Client empfängt.

Auf der Clientseite, GWT-Validierung in Ihrem Projekt verwenden Sie (zusammen mit dem Glas auf Ihrem Classpath) hinzufügen müssen, um Ihre GWT-Modul XML-Datei

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

Stellen Sie sicher, DTOs zu implementieren com.google.gwt.validation.client.interfaces.IValidatable

Um auf der Client-Seite Verwendung zu validieren

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

auf dem Server Seitlicher Gebrauch

com.google.gwt.validation.server.ServerValidator 

Es ist ein bisschen Arbeit, das richtig einzurichten, aber dann funktioniert es perfekt.

+0

Das ist genau das, was ich gesucht habe! Ich gehe davon aus, dass der Link, den ich in der Antwort suchte, http://code.google.com/p/gwt-validation/ ist, oder? –

+1

Das offizielle GWT-Projekt zur Unterstützung von JSR 303 funktioniert seit GWT2.4 einwandfrei und erfordert keine Implementierung von IValidatable. Sie finden hier alles, was Sie brauchen: http://code.google.com/p/google-web-toolkit/wiki/BeanValidierung. Sowohl die Client- als auch die Serverseite werden mit einer Anmerkung zu Ihren Domänenobjekten oder DTOs abgedeckt. – koma

+0

ist das ein totes Projekt? Ich möchte es benutzen, aber nicht wissen, ob ich ihm vertrauen kann !? – HaveAGuess

4

Ich habe es noch nicht benutzt, aber GWT 2.1 enthält einige Validierungs-Unterstützung.

Überprüfen Sie das ShowCase example.

+0

Danke für die Antwort Carlos. Dieses Beispiel zeigt, wie Sie eine benutzerdefinierte Zelle erstellen können, die Benutzereingaben manuell überprüft. Was ich vermeiden möchte, ist, dass ich meine Validierung zweimal im Client und auf dem Server schreiben muss. –

+0

@Javier, wenn Sie genug Wert auf die Gültigkeit Ihrer Daten zur Durchführung der Validierung überall, sollten Sie unbedingt die Validierung auf der Serverseite tun. Client-seitige Validierung ist nur eine nette Funktion, um die Zeit und die Bemühungen Ihrer Benutzer zu sparen. – sarnold

+0

Danke für den Zeiger, ich werde es ausprobieren –

6

GWT 2.5 hat eine neue Funktion nur für diese: https://developers.google.com/web-toolkit/doc/latest/DevGuideValidation

Es verwendet die Hibernate Validator.

1) Sie müssen AbstractGwtValidatorFactory erweitern und Ihre Bean z. :

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) Dann fügen Sie das zu Ihrem gwt hinzu.xml:

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

3) Bestätigen Sie Ihre Bohne

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

oops, ich sah die Frage wurde mit einem Link ähnlich dieser Antwort aktualisiert. – rjdkolb