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

iec*_*fly 4 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;
    }

}
Run Code Online (Sandbox Code Playgroud)

如您所见,我正在尝试验证电子邮件地址的唯一性.如果电子邮件不是唯一的,我想在电子邮件字段中显示错误消息,而不是全局错误消息

实现validate()方法实现此目的的正确方法是什么?

Dan*_*iel 8

您应该使用validate具有以下签名的方法:

public Map<String, List<ValidationError>> validate()
Run Code Online (Sandbox Code Playgroud)

这样您可以将错误添加到单个字段,如下所示:

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;
Run Code Online (Sandbox Code Playgroud)

请注意,如果您应该返回一张地图,它仍会将表格渲染为错误.如果希望validate()方法成功,则需要返回null.