【问题标题】:Play Framework - play.data.validations vs. custom validations?Play Framework - play.data.validations 与自定义验证?
【发布时间】:2015-04-29 20:48:35
【问题描述】:

使用 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,但在空半径字段上没有闪烁警告。然后,如果我填写名称字段并尝试再次提交表单,现在它会在半径字段上显示 Flash 错误消息“无效半径”。

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

【问题讨论】:

    标签: java forms validation playframework playframework-2.3


    【解决方案1】:

    如您所见,如果来自注释的自定义验证无效,Play 将不会继续进行自定义验证。如文档中所述:

    Handling form submission: Defining constraints

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-06
      • 1970-01-01
      • 1970-01-01
      • 2015-03-17
      • 2015-12-26
      相关资源
      最近更新 更多