GWT JSR 303客户端验证

12
我正在开发一个使用Spring后端和JSR 303验证的GWT应用程序。该应用程序可以脱机并使用浏览器HTML5 / Gears数据库。
目前最好的实现客户端验证的方法是什么?到目前为止,我已经找到了gwt-validation框架(http://code.google.com/p/gwt-validation/),但它似乎已经不再活跃。
谢谢!
更新:
有一个新的GWT官方项目来支持JSR 303 Bean Validation(链接在这里)。在该项目足够成熟后,我认为这是前进的方式。
3个回答

12
我们的验证框架是一个客户端和服务器端数据输入验证框架,其作用是确保从客户端传递到服务器端的数据符合业务规则。
验证框架使用GWT Validation项目,该项目实现了“JSR 303:Bean Validation”规范。
其思想是使用JSR303注解装饰数据传输对象(DTO)类和字段,以描述它们的有效性规则。
每个数据传输对象必须用自己的验证注解进行装饰。
每个服务器端服务实现必须验证从客户端接收到的数据传输对象。
在客户端上,要在项目中使用GWT-Validation,您需要将其添加到您的GWT模块xml文件中(与您的类路径上的jar一起)。
<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

正确设置需要一些工作,但一旦完成,它将完美运行。


这正是我在寻找的!我猜答案中我要找的链接是 http://code.google.com/p/gwt-validation/,对吗? - Eran Medan
1
GWT官方项目支持JSR 303自GWT2.4以来运行良好,无需实现IValidatable,您可以在此处找到所需的所有内容:http://code.google.com/p/google-web-toolkit/wiki/BeanValidation。客户端和服务器端都可以使用一个注释覆盖您的域对象或DTO。 - koma
这是一个已经弃用的项目吗?我想使用它,但不确定是否可以信任它!? - HaveAGuess
1
gwt-validation@gwt-validation.googlecode.com并没有消亡。事实上,在过去的一年左右,它已经有了一定的复兴。其目标是不需要任何特殊的实现或实施者的行动。 - Chris Ruffalo

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

哎呀,我看到问题已经更新了一个类似于这个答案的链接。 - rjdkolb

4

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

请查看ShowCase示例


谢谢您的回答,Carlos。那个示例展示了如何创建一个自定义单元格来手动验证用户输入。我想要避免的是在客户端和服务器中都要写两次验证。 - Javier Ferrero
@Javier,如果你足够关心数据的有效性并在任何地方执行验证,那么你绝对应该在服务器端进行验证。客户端验证只是一个不错的功能,可以节省用户的时间和精力。 - sarnold

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接