我在 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;
...
我在 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;
...
@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 示例。
万一有人从谷歌偶然发现这个问题。这就是我所做的
@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
下面的代码返回全局错误。
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;
}
这是官方文档,对此进行了更多描述。