Validation GWT JSR 303客户端验证

Validation GWT JSR 303客户端验证,validation,gwt,bean-validation,Validation,Gwt,Bean Validation,我正在开发一个带有Spring后端的GWT应用程序,该后端使用JSR303验证。应用程序可以脱机并使用浏览器HTML5/Gears数据库 实现客户机验证的最佳方式是什么?到目前为止,我已经找到了gwt验证框架(),但它似乎不再处于活动状态 谢谢 更新: 有一个新的GWT官方项目支持JSR303bean验证()。在我看来,一旦项目足够成熟,就应该这样做 我还没有使用它,但是GWT2.1包含了一些验证支持 查看ShowCase。我们的验证框架是一个客户端和服务器端数据输入验证框架。它的角色是确保从客

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

实现客户机验证的最佳方式是什么?到目前为止,我已经找到了gwt验证框架(),但它似乎不再处于活动状态

谢谢

更新:


有一个新的GWT官方项目支持JSR303bean验证()。在我看来,一旦项目足够成熟,就应该这样做

我还没有使用它,但是GWT2.1包含了一些验证支持


查看ShowCase。

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

验证框架使用GWT验证项目,该项目实现了“JSR303:Bean验证”规范

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

  • 每个数据传输对象都必须使用自己的验证注释进行修饰
  • 每个服务器端服务实现都必须验证它从客户端接收的数据传输对象
  • 在客户端,要在项目中使用GWT验证,需要将(连同类路径上的jar)添加到GWT模块xml文件中

    <inherits name="com.google.gwt.validation.Validation" />
    
    在服务器端使用

    com.google.gwt.validation.server.ServerValidator
    

    要正确设置它需要一点工作,但是它工作得很好。

    GWT 2.5为此提供了一个新功能:

    它使用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);
    
    Validator Validator=Validation.buildDefaultValidatorFactory().getValidator();
    设置冲突=验证程序。验证(个人);
    
    谢谢您的回答。该示例显示了如何创建手动验证用户输入的自定义单元格。我要避免的是必须在客户端和服务器上写两次验证。@Javier,如果您足够关心数据的有效性,可以在任何地方执行验证,那么您绝对应该在服务器端进行验证。客户端验证只是一个很好的功能,可以节省用户的时间和精力。这正是我想要的!我想我在答案中寻找的链接是,对吗?支持JSR 303的GWT官方项目运行良好,因为GWT2.4不需要您实现IValidatable,您可以在这里找到所需的一切:。客户端和服务器端在域对象或DTO上都有一个注释。这是一个死项目吗?我想用它,但不知道我是否能相信它!?gwt validation@gwt-validation.googlecode.com并没有死。事实上,在过去一年左右的时间里,出现了某种程度的复苏。这样做的目的是不需要代表实现者进行任何特殊的实现或操作。哎呀,我看到这个问题已经用一个类似于这个答案的链接进行了更新。
    Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
    Set<ConstraintViolation<Person>> violations = validator.validate(person);