4

基本的に私は次のフォームクラスを持っています。

public static class BasicForm {
    @Required
    public String name;
    @Required
    @Email
    public String email;
    @Required
    public String password;
    @Required
    public String confirmPassword;

    public List<ValidationError> validate() {
        if (User.findByEmail(email) != null) {
            List<ValidationError> validationErrorList = new ArrayList<ValidationError>();
            validationErrorList.add(new ValidationError("email", "error.alreadyexists", new ArrayList<Object>()));
            return validationErrorList;
        }
        return null;
    }

}

ご覧のとおり、私はメールアドレスの一意性を検証しようとしています。電子メールが一意でない場合は、グローバルエラーメッセージとしてではなく、電子メールフィールドにエラーメッセージを表示したいと思います

これを達成するためにvalidate()メソッドを実装する正しい方法は何ですか?

4

3 に答える 3

8

validate次のシグネチャを持つメソッドを使用する必要があります。

public Map<String, List<ValidationError>> validate()

このようにして、次のように単一のフィールドにエラーを追加できます。

Map<String, List<ValidationError>> errors = null;
if (emailIsBad) {
    errors = new HashMap<String, List<ValidationError>>();
    List<ValidationError> list = new ArrayList<ValidationError>();
    list.add(new ValidationError("email", "email is bad"));
    errors.put("email", list);
}
return errors;

空のマップを返す必要がある場合でも、フォームが誤ったものとしてレンダリングされることに注意してください。validate()メソッドを成功させるには、nullを返す必要があります。

于 2012-09-13T13:53:37.760 に答える
1

(まだ)コメントするのに十分な担当者ではありませんが、適切なインポートステートメントを含めることを忘れないでください:

import.play.data.validation.*;

間違ったステートメントのために私は数分を無駄にしました。

于 2014-02-07T00:13:05.700 に答える
0

これは私がダニエルのコードに基づいて思いついたものです:私のコードはパスワードの確認をチェックします。

public Map<String, List<ValidationError>> validate() {
       Map<String, List<ValidationError>> errors = null;

            if (!password.equals(confirmPassword)) {
                errors = new HashMap<>();
                List<ValidationError> list = new ArrayList<>();
                list.add(new ValidationError("password", "Passwords do not match"));
                errors.put("password",list);
                errors.put("confirmPassword", list);
            }

            return errors;
        }
于 2013-11-14T22:40:30.427 に答える