使用Google Web Toolkit进行表单验证?

Nic*_*ner 11 validation gwt

我是GWT的新手.表单验证有哪些好的解决方案?如果可能的话,我想避免自己动手.

Don*_*onX 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();
}
}
Run Code Online (Sandbox Code Playgroud)

Validator.java

public abstract class Validator {

    public String errorMessage;

    public abstract boolean validate(String value);

    public abstract String getErrorMessage();
}
Run Code Online (Sandbox Code Playgroud)

样本电子邮件验证器

public class EmailValidator extends Validator {

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

public String getErrorMessage() {
    return errorMessage;
 }
}
Run Code Online (Sandbox Code Playgroud)

我的验证错误如下所示

样本验证错误

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


Tho*_*yer 6

GXT和SmartGWT(由于许多原因,我强烈反对这两者都有表格验证).

GWT的编辑器框架提供了一个显示的平均值javax.validation.ConstraintViolation(您仍然必须通过实现HasEditorErrors接收给定字段的错误来执行实际显示;编辑器框架仅将错误调度到适当的"字段")但是没有任何内容可以验证客户端.

最近发布的GWT 2.3在客户端初步支持JSR 303 Bean验证,但还没有完成:http://code.google.com/p/google-web-toolkit/wiki/BeanValidation 我认为GWT 2.4将会有完整(或几乎完全)的支持.

请注意,GWT对验证的关注是验证对象,而不是验证编辑对象属性的"表单字段".

  • 如果您能抵制使用SmartGWT或GXT的诱惑,那么您应该抵制它.SmartGWT和GXT展示使它们的外观非常吸引人,但是当您想要执行MVP/MVC甚至简单验证时,它们的技术/协议期望与GWT不一致并且变得非常混乱.最好使用普通的GWT并降低应用程序的审美期望,然后逐步处理CSS.在开发美学之前,让您的应用程序正常工作.不要让SmartGWT或GXT转移你的任务.如果它是谷歌的良好enuf,它是很好的enuf为您. (9认同)
  • SmartGWT只是SmartClient的一个包装器,因此它不会受益于GWT编译器所做的任何优化.GXT是如此重量级(臃肿?),你在"Hello World"之后学到的第二件事是如何制作一个"加载,请稍候"的启动画面(这是我给出的一本书供审阅).它们都没有与GWT"本机"小部件很好地集成(从我在线阅读的内容).而且我相信如果我只考虑一下,我会发现许多其他原因. (6认同)

Fre*_*tte 5

我们目前正在使用此项目进行表单验证:http: //code.google.com/p/gwt-validation/

它是源代码,作为新GWT 2.4验证框架的基础.

Chris Buffalo在这个项目上做得非常出色.为我们开箱即用.