2011-05-28 20 views

回答

6

GXT和SmartGWT(我强烈建议,两者都有很多原因)都有表单验证。

GWT的编辑器框架提供的平均显示javax.validation.ConstraintViolation(你仍然必须通过实施HasEditorErrors接收错误的某一领域做实际的显示;编辑框架仅分派错误到适当的“田”)但没有什么可以在客户端验证。最近发布的GWT 2.3已经在客户端对JSR 303 Bean Validation进行了初步支持,但它尚未完成:http://code.google.com/p/google-web-toolkit/wiki/BeanValidation 我认为GWT 2.4将有完整(或几乎完整)的支持。

请注意,GWT在验证方面的权益是验证对象,而不是验证编辑对象属性的“表单域”。

+0

为什么你会建议针对GXT和SmartGWT? – 2011-05-28 23:51:58

+6

SmartGWT只是SmartClient的封装,所以它不会从GWT编译器所做的任何优化中受益。 GXT的体重过重(臃肿?),你在“Hello World”之后学到的第二件事是如何做一个“加载,请稍候”的初始屏幕(这是来自一本我被给予审查的书)。他们都没有很好地集成GWT“本地”小部件(从我在线阅读)。如果我想一点点,我相信我可以找到许多其他的理由。 – 2011-05-29 22:01:09

+9

如果您能够抵制使用SmartGWT或GXT的诱惑,您应该抵制它。 SmartGWT和GXT展示的外观非常吸引人,但是当你想要执行MVP/MVC甚至简单的验证时,他们的技术/协议期望与GWT并不一致,并且变得非常混乱。最好使用普通的GWT,并减弱应用程序的审美期望,然后逐渐在CSS上工作。在开始审美之前先让你的应用程序工作。不要让SmartGWT或GXT转移你的使命。如果它对谷歌来说很好,那么它对你来说是一个很好的选择。 – 2011-06-02 02:30:46

8

在我的GWT应用程序中,我总是使用我的自定义验证器类。我创建了我自己的文本框类,它扩展了gwt文本框。我调用CustomTextBox而不是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(); 
} 

样品电子邮件验证

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

我的验证错误看起来像下面

Sample validation error

如果你喜欢这个方法,你可以按照这个。这里的问题是我们不直接在UI中显示错误消息。只有在我们展示的工具提示中。

+0

这看起来很简单。有没有框架解决方案? – 2011-05-29 07:55:30

+0

可能有一些其他的框架。但我没有尝试过。 – DonX 2011-05-30 12:38:39

+0

好解决方案。你可以分享“HasValidators”界面和“TEXTBOX_VALIDATION_ERROR_STYLE”css风格吗? – MyTitle 2012-01-30 16:26:23

5

目前,我们正在使用这个项目的形式验证: http://code.google.com/p/gwt-validation/

这是作为新的GWT 2.4验证框架的基础源代码。

克里斯布法罗一直在做这个项目的惊人的工作。为我们开箱即用。