我正在开发一个使用JSR 303验证的Spring后端的GWT应用程序。该应用程序可以脱机并改为使用浏览器HTML5 / Gears数据库。
实施客户端验证的最佳方法是什么?到目前为止,我已经找到了gwt-validation框架(http://code.google.com/p/gwt-validation/),但它似乎已不再有效。
谢谢!
更新:
有一个新的GWT官方项目支持JSR 303 Bean验证(link here)。 IMO这是项目成熟后的方法。
答案 0 :(得分:13)
我们的验证框架是客户端和服务器端数据输入验证框架。它的作用是确保业务规则符合从客户端传递到服务器的数据。
验证框架使用实现“JSR 303:Bean Validation”规范的GWT Validation项目。
这个想法是用JSR303注释装饰数据传输对象(DTO)类和字段来描述它们的有效性规则。
在客户端,要在项目中使用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。