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 回答