基本上我有以下表格类。
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()方法实现此目的的正确方法是什么?
答案 0 :(得分: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。
答案 1 :(得分:1)
还没有足够的回复评论(但),但不要忘记包含正确的导入语句:
import.play.data.validation.*;
由于声明不正确,我浪费了几分钟。
答案 2 :(得分:0)
这是我基于丹尼尔的想法 码: 我的代码检查密码确认,tho。
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;
}