使用Play Framework 2.3.x,我发现使用play.data.validation package中的注释和validate()
函数中编写的自定义代码之间存在差异。
例如,我们说我有Circle.java
public class Circle extends Model {
@Constraints.Required
public String name;
public Double radius;
public List<ValidationError> validate() {
List<ValidationError> errors = new ArrayList<ValidationError>();
if(radius == null || radius < 0) {
errors.add(new ValidationError("radius", "Invalid radius"));
}
return errors.isEmpty() ? null : errors;
}
// other stuff...
}
我们说我有一个表单,而在我的控制器中我使用bindFromRequest()
方法。如果我在表单中将两个条目留空,则在名称字段上出现闪存错误,并显示默认消息error.required
,但空半径字段上没有闪烁警告。然后,如果我填写名称字段并尝试再次提交表单,现在它显示闪存错误消息&#34;无效半径&#34;在半径场上。
我不希望用户多次提交表单以显示不同的验证消息。为什么不播放同时执行所有验证检查?是否可以通过这种方式检查验证?
答案 0 :(得分:4)
如您所见,如果注释中的这些内容无效,则Play不会继续自定义验证。如文档中所述:
Handling form submission: Defining constraints
在检查基于注释的约束并且仅在它们通过时调用
validate
方法。
实际上您的情况很明显,因为您可以从Required
字段中移除name
注释并将其移到您的方法中。
其他方法可能是为radius
编写自定义验证类,并通过注释使用它。