2010-11-22 13 views
12

Estoy desarrollando una aplicación GWT con un backend de Spring que usa la validación JSR 303. La aplicación puede desconectarse y usar el navegador HTML5/Gears database en su lugar.GWT JSR 303 validación del cliente

¿Cuál es la mejor manera de implementar la validación del cliente? Hasta ahora he encontrado gwt-validation framework (http://code.google.com/p/gwt-validation/) pero parece que ya no está activo.

Gracias!

ACTUALIZACIÓN:

Hay un nuevo proyecto oficial GWT para apoyar JSR 303 Bean Validation (link here). OMI este es el camino a seguir una vez que el proyecto esté lo suficientemente maduro.

Respuesta

13

Nuestro marco de validación es un marco de validación de entrada de datos del lado del cliente y del servidor. Su función es garantizar el cumplimiento de las reglas comerciales de los datos transmitidos por los clientes al servidor.

El marco de validación utiliza el proyecto de Validación GWT que implementa la especificación "JSR 303: Validación de Frijol".

La idea es decorar las clases y campos de Data Transfer Objects (DTO) con anotaciones JSR303 para describir sus reglas de validez.

  1. Cada objeto de transferencia de datos debe estar decorado con sus propias anotaciones de validación.
  2. Cada implementación del servicio del lado del servidor debe validar los objetos de transferencia de datos que recibe del cliente.

En el lado del cliente, para usar GWT-Validación en su proyecto en el que tendrá que añadir (junto con el frasco en su ruta de clase) a su archivo de módulo XML GWT

<inherits name="com.google.gwt.validation.Validation" /> 

Asegúrese de poner en práctica dtos com.google.gwt.validation.client.interfaces.IValidatable

Para validar el uso del lado del cliente

com.google.gwt.validation.client.interfaces.IValidator.validateProperty((T) model, propertyName); 

en el servidor uso lateral

com.google.gwt.validation.server.ServerValidator 

Trabajar un poco, pero funciona a la perfección.

+0

¡Esto es exactamente lo que estaba buscando! Supongo que el enlace que estaba buscando en la respuesta es http://code.google.com/p/gwt-validation/, ¿verdad? –

+1

El proyecto oficial de GWT para admitir JSR 303 funciona bien desde GWT2.4 y no requiere que implemente IValidatable, puede encontrar todo lo que necesita aquí: http://code.google.com/p/google-web-toolkit/wiki/BeanValidation. Tanto el lado del cliente como el del servidor están cubiertos con una anotación en sus objetos de dominio o DTO. – koma

+0

¿es este un proyecto muerto? ¡Quiero usarlo pero no sé si puedo confiar en él !? – HaveAGuess

4

No lo he usado todavía, pero GWT 2.1 incluye algún soporte de Validación.

Compruebe el ShowCase example.

+0

Gracias por la respuesta de Carlos. Ese ejemplo muestra cómo puede crear una celda personalizada que valida manualmente la entrada del usuario. Lo que quiero evitar es tener que escribir mi validación dos veces en el cliente y en el servidor. –

+0

@Javier, si le importa lo suficiente sobre la validez de sus datos para realizar la validación en cualquier lugar, debe realizar la validación por el lado del servidor. La validación del lado del cliente es solo una buena característica para ahorrarle tiempo y esfuerzos a los usuarios. – sarnold

+0

Gracias por el puntero, lo intentaré –

6

GWT 2.5 tiene una nueva característica sólo para esto: https://developers.google.com/web-toolkit/doc/latest/DevGuideValidation

Utiliza el validador de hibernación.

1) Deberá extender AbstractGwtValidatorFactory y aplicar su bean, por ej. :

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) A continuación, agregue esto a su gwt.xml:

<inherits name="org.hibernate.validator.HibernateValidator" /> 
<replace-with 
    class="yourpackage.SampleValidatorFactory"> 
    <when-type-is class="javax.validation.ValidatorFactory" /> 
</replace-with> 

3) validar su grano de

Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); 
Set<ConstraintViolation<Person>> violations = validator.validate(person); 
+0

Vaya, vi que la pregunta se ha actualizado con un enlace similar a esta respuesta. – rjdkolb

Cuestiones relacionadas