基本上我有以下表单类。
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() 方法来实现这一目标的正确方法是什么?
最佳答案
您应该使用 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;
请注意,如果您应该返回一个空的 map ,它仍然会将表单呈现为错误的。如果您想要
validate()
方法要成功,你需要返回null。
关于validation - 如何在 Play 中的特定表单字段上设置自定义验证错误! 2.*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12404088/