2

我在 Play 中找不到 @Equal 约束!2.

我查看了 API http://www.playframework.org/documentation/api/2.0.2/java/index.html

我想要一个 SignupForm 来检查密码是否相等。我不相信我必须为这样一个常见问题编写自己的约束。

就像是:

...
@Min(6)
public String password;
@Equal(password)
public String confirmPassword;
...
4

3 回答 3

3

@Equal在 JSR 303 中,我在其他 Java 框架中都没有任何限制。

要检查密码,并不难:在您的表单对象中,只需编写一个public String validate()方法:

public class SignupForm {

    @Min(6)
    public String password;

    @Min(6)
    public String confirmPassword;

    public String validate() {
        if(!password.equals(confirmPassword)) {
            return "Password mismatch";
        }
        return null;
    }

}

看看这个类中的zentask 示例

于 2012-08-02T15:26:30.657 回答
0

万一有人从谷歌偶然发现这个问题。这就是我所做的

    @MinLength(6)
    public String password;

    @MinLength(6)
    public String confirmPassword;

    public List<ValidationError> validate(){
        List<ValidationError> errors = new ArrayList<ValidationError>();
        if(!this.password.equals(this.confirmPassword)){
            errors.add(new ValidationError("password", "Passwords must match."));
        }
        return errors.isEmpty() ? null : errors;
    }

你必须使用@MinLength(6)而不是@Min(6),我认为那是因为密码是一个字符串。如果有人没有输入匹配的密码,返回验证错误列表将在您的表单中显示为错误。否则,他们将看不到哪里出了问题。

我在这里找到了有用的信息https://www.playframework.com/documentation/2.2.x/JavaForms

于 2015-02-21T20:51:46.840 回答
0

下面的代码返回全局错误。

public String validate() {
   if(!password.equals(confirmPassword)) {
      return "Password mismatch";
   }
    return null;
}

但下面的代码片段更具体地返回特定于 confirmPassword 字段的错误。

public List<ValidationError> validate(){
   List<ValidationError> errors = new ArrayList<ValidationError>();
   if(!this.password.equals(this.confirmPassword)){
       errors.add(new ValidationError("confirmPassword", "Password should be same."));
    }
    return errors.isEmpty() ? null : errors;
}

是官方文档,对此进行了更多描述。

于 2015-09-18T09:44:47.920 回答