12

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

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

谢谢!

更新:

有一个新的 GWT 官方项目来支持 JSR 303 Bean Validation(链接在这里)。一旦项目足够成熟,IMO 就是要走的路。

4

3 回答 3

12

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

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

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

  1. 每个数据传输对象都必须使用自己的验证注释进行修饰。
  2. 每个服务器端服务实现都必须验证它从客户端接收到的数据传输对象。

在客户端,要在您的项目中使用 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

正确设置它需要一些工作,但它可以完美运行。

于 2010-11-23T06:53:10.927 回答
6

GWT 2.5 有一个新功能就是为此: https ://developers.google.com/web-toolkit/doc/latest/DevGuideValidation

它使用休眠验证器。

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);
于 2012-12-19T07:21:24.167 回答
4

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

检查 ShowCase示例

于 2010-11-22T20:17:00.173 回答