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

时间:2011-05-28 19:25:35

标签: gwt validation

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

3 个答案:

答案 0 :(得分: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._%+-]+@[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中显示错误消息。仅在我们展示的工具提示中。

答案 1 :(得分: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对验证的关注是验证对象,而不是验证编辑对象属性的“表单字段”。

答案 2 :(得分:5)

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

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

Chris Buffalo在这个项目上做了很多精彩的工作。为我们开箱即用。