如何在Play中的特定表单字段上设置自定义验证错误! 2. *

时间:2012-09-13 10:20:12

标签: 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<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()方法实现此目的的正确方法是什么?

3 个答案:

答案 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;
        }