我是GWT的新手。表单验证有哪些好的解决方案?如果可能的话,我想避免自己动手。
答案 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;
}
}
我的验证错误如下所示
如果你喜欢这种方法,你可以遵循这个。这里的问题是我们不直接在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在这个项目上做了很多精彩的工作。为我们开箱即用。