Проверка формы с помощью Google Web Toolkit? - PullRequest
11 голосов
/ 28 мая 2011

Я новичок в GWT. Какие хорошие решения существуют для проверки формы? Я хотел бы, если это возможно, избежать своих собственных действий.

Ответы [ 3 ]

8 голосов
/ 29 мая 2011

В моих приложениях 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

Если вам нравится этот подход, вы можете следовать этому. Проблема здесь в том, что мы не отображаем сообщение об ошибке непосредственно в интерфейсе пользователя. Только в подсказке мы показываем.

6 голосов
/ 29 мая 2011

GXT и SmartGWT (оба из них я бы настоятельно рекомендовал по многим причинам) имеют проверку формы.

Среда редактора GWT предоставляет средство для отображения javax.validation.ConstraintViolation (вам все равно придется выполнить фактическое отображение, внедрив HasEditorErrors, чтобы получать ошибки для данного поля; Среда редактора только отправляет ошибки в соответствующее " поля "), но нечего проверять на стороне клиента.

Недавно выпущенный GWT 2.3 имеет предварительную поддержку проверки bean-компонента JSR 303 на стороне клиента, но еще не завершен: http://code.google.com/p/google-web-toolkit/wiki/BeanValidation Я думаю, что GWT 2.4 будет иметь полную (или почти полную) поддержку.

Обратите внимание, что GWT делает ставку на валидацию, а не на валидацию "полей формы", редактирующих свойства объекта.

5 голосов
/ 16 июня 2011

В настоящее время мы используем этот проект для проверки форм: http://code.google.com/p/gwt-validation/

Это исходный код, который служит основой для новой среды GWT 2.4 Validation.

Крис Буффало делалудивительная работа над этим проектом.Работает из коробки у нас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...