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

时间:2015-02-27 07:52:12

标签: java forms validation playframework playframework-2.3

使用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;在半径场上。

我不希望用户多次提交表单以显示不同的验证消息。为什么不播放同时执行所有验证检查?是否可以通过这种方式检查验证?

1 个答案:

答案 0 :(得分:4)

如您所见,如果注释中的这些内容无效,则Play不会继续自定义验证。如文档中所述:

Handling form submission: Defining constraints

  在检查基于注释的约束并且仅在它们通过时调用

validate方法。

实际上您的情况很明显,因为您可以从Required字段中移除name注释并将其移到您的方法中。

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