Validation 如何在正在使用的特定表单字段上设置自定义验证错误!2.*
基本上我有一个下面的表单类Validation 如何在正在使用的特定表单字段上设置自定义验证错误!2.*,validation,playframework-2.0,Validation,Playframework 2.0,基本上我有一个下面的表单类 public static class BasicForm { @Required public String name; @Required @Email public String email; @Required public String password; @Required public String confirmPassword; public List<Valid
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;
}
}
公共静态类基本格式{
@必需的
公共字符串名称;
@必需的
@电子邮件
公共字符串电子邮件;
@必需的
公共字符串密码;
@必需的
公共字符串确认密码;
公共列表验证(){
if(User.findByEmail(email)!=null){
List validationErrorList=新建ArrayList();
add(新的ValidationError(“email”,“error.alreadyexists”,new ArrayList());
返回validationErrorList;
}
返回null;
}
}
如您所见,我正在尝试验证电子邮件地址的唯一性。
如果电子邮件不是唯一的,我希望在电子邮件字段中显示错误消息,而不是显示为全局错误消息
实现validate()方法的正确方法是什么?您应该使用带有以下签名的
验证方法:
publicmap验证()
通过这种方式,您可以向单个字段添加错误,如下所示:
Map errors=null;
如果(emailIsBad){
errors=newhashmap();
列表=新的ArrayList();
添加(新的验证错误(“电子邮件”,“电子邮件坏”));
错误。放置(“电子邮件”,列表);
}
返回错误;
请注意,如果您返回一个空映射,它仍然会将表单呈现为错误。如果希望validate()
方法成功,则需要返回null。这是我根据Daniel的
代码:
我的代码检查密码确认,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;
}
publicmap验证(){
映射错误=null;
如果(!password.equals(confirmPassword)){
errors=newhashmap();
列表=新的ArrayList();
添加(新的ValidationError(“密码”,“密码不匹配”));
错误。输入(“密码”,列表);
错误。输入(“确认密码”,列表);
}
返回错误;
}
还没有足够的代表发表评论,但别忘了包含正确的导入语句:
import.play.data.validation.*;
由于一个错误的陈述,我浪费了几分钟。你们是怎么做到的?无法实例化列表,因为它是一个接口。此外,字符串不会隐式转换为ValidationError,所以list.add(“email是坏的”)也不起作用。我对Java或Play不是很有经验,所以,可能是我错过了什么?@LeoHernandez我更新了一些示例代码来解决您的问题。真的帮了我!!10万谢谢!我现在用它来避免出现全局性错误,这些错误实际上是关于特定领域的,太棒了!