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万谢谢!我现在用它来避免出现全局性错误,这些错误实际上是关于特定领域的,太棒了!