2011-05-28 25 views

Respuesta

6

GXT y SmartGWT (los dos recomendaría mucho, por muchas razones) tienen validación de formulario.

marco Editor de GWT proporciona un medio para visualizar javax.validation.ConstraintViolation (que todavía tendría que hacer la pantalla real mediante la implementación de HasEditorErrors para recibir los errores para un campo dado, el marco Editor sólo distribuye los errores a los "campos" apropiados) pero nada para validar en el lado del cliente.

El recientemente publicado, GWT 2.3 tiene soporte preliminar para JSR 303 Bean Validation en el lado del cliente, pero aún no ha terminado: http://code.google.com/p/google-web-toolkit/wiki/BeanValidation creo GWT 2.4 tendrá soporte completo (o casi completa).

Tenga en cuenta que la participación de GWT en la validación se basa en la validación de los objetos, no en la validación de los "campos de formulario" que editan las propiedades de un objeto.

+0

¿Por qué desaconseja GXT y SmartGWT? –

+6

SmartGWT es solo un contenedor de SmartClient, por lo que no se beneficia de ninguna optimización realizada por el compilador de GWT. GXT es tan pesado (¿hinchado?) Que lo segundo que aprendes después de "Hello World" es cómo hacer una pantalla emergente de "carga, por favor espera" (esto es de un libro que me dieron para su revisión). Y ninguno de ellos se integra muy bien con widgets "nativos" de GWT (por lo que leo en línea). Y creo que podría encontrar muchas otras razones si lo pensara solo un poco. –

+9

Si puede resistir la tentación de usar SmartGWT o GXT, debe resistirse. Las vitrinas SmartGWT y GXT hacen que su apariencia sea muy atractiva, pero cuando quieres realizar MVP/MVC o incluso validación simple, sus expectativas tecnológicas/de protocolo no coinciden con GWT y se vuelven muy confusas.Es mejor usar GWT simple y atontar la expectativa estética de su aplicación y luego trabajar gradualmente en CSS. Deje que su aplicación funcione antes de trabajar en la estética. No permita que SmartGWT o GXT lo desvíen de esa misión. Si es bueno enuf para google, es bueno enuf para ti. –

8

En mis aplicaciones GWT siempre uso mis clases personalizadas de validador. Creé mi propia clase de cuadro de texto que amplía gwt textbox. Y llamo CustomTextBox en lugar de la caja de texto de gwt.

CustomTextBox.java

public class CustomTextBox extends TextBox implements HasValidators{ 

private static final String TEXTBOX_VALIDATION_ERROR_STYLE = "error-text-box"; 
private String errorMessage = ""; 
private List<Validator> validators = new ArrayList<Validator>(); 

public CustomTextBox() { 
    } 

public CustomTextBox(String name) { 
    setName(name); 
} 

public String getErrorMessage() { 
    return errorMessage; 
} 

public void setErrorMessage(String errorMessage) { 
    this.errorMessage = errorMessage; 
} 

public void addValidator(Validator validator) { 
    validators.add(validator); 
} 

public boolean validate() { 
    boolean validationResult = true; 
    for (Validator validator : validators) { 
     validationResult = validator.validate(getValue().trim()); 
     if (!validationResult) { 
      errorMessage = validator.getErrorMessage(); 
      break; 
     } 
     errorMessage = validator.getErrorMessage(); 
    } 
    setErrorStyles(validationResult); 
    return validationResult; 
} 

private void setErrorStyles(boolean validationResult) { 
    if (validationResult) { 
     removeStyleName(TEXTBOX_VALIDATION_ERROR_STYLE); 
     setTitle(""); 
    } else { 
     addStyleName(TEXTBOX_VALIDATION_ERROR_STYLE); 
     setTitle(errorMessage); 
    } 
} 

@Override 
public void setValue(String s) { 
    removeStyleDependentName(TEXTBOX_VALIDATION_ERROR_STYLE); 
    super.setValue(s); 
} 

@Override 
public String getValue() { 
    return super.getValue().trim(); 
} 
} 

Validator.java

public abstract class Validator { 

    public String errorMessage; 

    public abstract boolean validate(String value); 

    public abstract String getErrorMessage(); 
} 

Muestra de correo electrónico validador

public class EmailValidator extends Validator { 

public boolean validate(String value) { 
    if (value.matches("^[A-Za-z0-9._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,}$")) { 
     errorMessage = ""; 
     return true; 
    } else { 
     errorMessage = "Enter valid email Id"; 
     return false; 
    } 
} 

public String getErrorMessage() { 
    return errorMessage; 
} 
} 

Mi error de validación parece siguiente

Sample validation error

Si te gusta este enfoque puede seguir esto. El problema aquí es que no mostramos el mensaje de error directamente en la IU. Solo en la información sobre herramientas que mostramos.

+0

Eso se ve bastante sencillo. ¿No hay una solución de marco? –

+0

Puede haber algunos otros marcos. Pero no lo he intentado. – DonX

+0

buena solución. ¿Puedes compartir la interfaz "HasValidators" y el estilo CSS "TEXTBOX_VALIDATION_ERROR_STYLE"? – MyTitle

5

está usando actualmente este proyecto para la validación de formularios: http://code.google.com/p/gwt-validation/

Se está el código fuente que sirve de base a la nueva GWT 2.4 Marco de validación.

Chris Buffalo ha estado haciendo un trabajo increíble en ese proyecto. Funciona de la caja para nosotros.

Cuestiones relacionadas