在我的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中显示错误消息.只有在我们展示的工具提示中.
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对验证的关注是验证对象,而不是验证编辑对象属性的"表单字段".
我们目前正在使用此项目进行表单验证:http: //code.google.com/p/gwt-validation/
它是源代码,作为新GWT 2.4验证框架的基础.
Chris Buffalo在这个项目上做得非常出色.为我们开箱即用.