Code:
final FormPanel form = new FormPanel();
final TextField<String> field = new TextField<String>();
field.setAllowBlank(false);
field.setRegex("[a-zA-Z]{3}");
field.getMessages().setRegexText("regex");
field.setValidator(new Validator<String, TextField<String>>() {
public String validate(TextField<String> field, String value) {
if (value.equals("aaa")) {
field.forceInvalid("aaa");
} else {
field.clearInvalid();
}
return null;
}
});
Button valid = new Button("mark valid");
valid.addSelectionListener(new SelectionListener<ComponentEvent>() {
@Override
public void componentSelected(ComponentEvent ce) {
field.clearInvalid();
}
});
Button invalid = new Button("mark invalid");
invalid.addSelectionListener(new SelectionListener<ComponentEvent>() {
@Override
public void componentSelected(ComponentEvent ce) {
field.forceInvalid("invalid");
}
});
Button test = new Button("test");
test.addSelectionListener(new SelectionListener<ComponentEvent>() {
@Override
public void componentSelected(ComponentEvent ce) {
if (form.isValid()) {
System.out.println("valid");
} else {
System.out.println("invalid");
}
}
});
form.add(field);
form.add(valid);
form.add(invalid);
form.add(test);
RootPanel.get().add(form);
typed "aaa" in the field, and click on the button "test" - return valid, if you click again return invalid.
in this method I need use "forceInvalid" and "clearInvalid", because I use a RPC that return if what the user typed isn't registered in data base.
Code:
public String validate(TextField<String> field, String value) {
if (value.equals("aaa")) {
field.forceInvalid("aaa");
} else {
field.clearInvalid();
}
return null;
}
any ideai?