GWT JSR 303客户端验证

时间:2010-11-22 15:32:02

标签: validation gwt bean-validation

我正在开发一个使用JSR 303验证的Spring后端的GWT应用程序。该应用程序可以脱机并改为使用浏览器HTML5 / Gears数据库。

实施客户端验证的最佳方法是什么?到目前为止,我已经找到了gwt-validation框架(http://code.google.com/p/gwt-validation/),但它似乎已不再有效。

谢谢!

更新:

有一个新的GWT官方项目支持JSR 303 Bean验证(link here)。 IMO这是项目成熟后的方法。

3 个答案:

答案 0 :(得分:13)

我们的验证框架是客户端和服务器端数据输入验证框架。它的作用是确保业务规则符合从客户端传递到服务器的数据。

验证框架使用实现“JSR 303:Bean Validation”规范的GWT Validation项目。

这个想法是用JSR303注释装饰数据传输对象(DTO)类和字段来描述它们的有效性规则。

  1. 每个数据传输对象必须使用自己的验证注释进行修饰。
  2. 每个服务器端服务实现都必须验证从客户端收到的数据传输对象。
  3. 在客户端,要在项目中使用GWT-Validation,您需要将(以及类路径上的jar)添加到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
    

    正确设置它有点工作,但它完美无缺。

答案 1 :(得分: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)验证你的bean

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

答案 2 :(得分:4)

我还没有使用它,但GWT 2.1包含一些验证支持。

检查ShowCase example