Play Framework-Play.data.validations与自定义验证



使用Play Framework 2.3.x,我发现使用Play.data.validation包中的注释与使用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,但在空的半径字段上没有闪烁警告。然后,如果我填写名称字段并尝试再次提交表格,现在它会在半径字段上显示闪烁的错误消息"无效半径"。

我不希望用户必须多次提交表单才能显示不同的验证消息。为什么play不同时执行所有验证检查?可以用这种方式检查验证吗?

正如您所看到的,如果注释中的自定义验证无效,请不要继续播放。如文件所述:

处理表单提交:定义约束

validate方法在检查基于注释的约束后调用,并且仅当它们通过时调用。

事实上,您的情况很清楚,因为您可以从name字段中删除Required注释,并将其移动到您的方法中。

其他方法可以是为radius编写自定义验证类,并通过注释使用它。

最新更新