2010-11-22 1 views
12

Я разрабатываю приложение GWT с использованием backend, использующего JSR 303. Приложение может отключиться и вместо этого использовать базу данных браузера HTML5/Gears.Проверка клиента GWT JSR 303

Каков наилучший способ реализации проверки клиента? До сих пор я нашел gwt-validation framework (http://code.google.com/p/gwt-validation/), но кажется, что он больше не активен.

Спасибо!

UPDATE:

Существует новый официальный проект GWT для поддержки JSR 303 Bean Validation (link here). ИМО - это путь, когда проект достаточно зрелый.

ответ

13

Наша система проверки подлинности является основой для проверки ввода данных на стороне клиента и на стороне сервера. Его роль заключается в обеспечении соответствия бизнес-правил данным, переданным от клиентов серверу.

В рамках проверки используется проект проверки GWT, который реализует спецификацию «JSR 303: Bean Validation».

Идея состоит в том, чтобы украсить классы и поля Data Transfer Objects (DTO) с помощью аннотаций JSR303, чтобы описать их правила действительности.

  1. Каждый объект передачи данных должен быть украшен собственными аннотациями проверки.
  2. Каждая реализация службы на стороне сервера должна проверять объекты передачи данных, которые он получает от клиента.

На стороне клиента, чтобы использовать GWT-Validation в проекте вам необходимо добавить (вместе с банкой на вашем пути к классам) для вашего модуля XML файл GWT

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

Обеспечение DTOS реализации com.google.gwt.validation.client.interfaces.IValidatable

Для проверки на стороне клиента использования

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

на сервере боковое использование

com.google.gwt.validation.server.ServerValidator 

Немного работы, чтобы правильно настроить его, но затем он отлично работает.

4

Я еще не использовал его, но GWT 2.1 содержит некоторую поддержку валидации.

Проверьте ShowCase example.

+0

Спасибо за ответ Карлос. В этом примере показано, как создать пользовательскую ячейку, которая вручную проверяет ввод пользователя. То, что я хочу избежать, - это написать мою проверку дважды на клиенте и на сервере. – 2010-11-22 22:20:02

+0

@ Javier, если вы заботитесь о действительности своих данных для выполнения валидации в любом месте, вам абсолютно необходимо выполнить проверку на стороне сервера. Валидация на стороне клиента - это всего лишь приятная функция для экономии времени и усилий ваших пользователей. – sarnold 2011-07-07 22:01:20

+0

Спасибо за указатель, я попробую его – 2011-12-21 12:46:26

6

GWT 2.5 имеет новую функцию только для этого: https://developers.google.com/web-toolkit/doc/latest/DevGuideValidation

Он использует Hibernate Validator.

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