2010-11-22 99 views
12

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

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

谢谢!

UPDATE:

有一个新的GWT的官方项目,以支持JSR 303 Bean验证(link here)。一旦项目足够成熟,这就是IMO的方式。

回答

13

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

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

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

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

在客户端,使用GWT验证在你的项目,你需要添加(与你的classpath的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 

这是一个适当的设置,但它的工作完美的一点工作。

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的验证。

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