0

如何验证控制器内表单上的必填字段?例如,我的实体有 creation_date 字段,但我没有将此字段放在视图中的表单中,因为我需要将其设置在视图之外,即在控制器中。有没有人有如何做到这一点的任何例子?

谢谢

编辑:对不起,我没有说清楚。我的实体中有一个用@NotNull 注释的字段,我只需要在控制器中填写值(task.setCreationDate(new Date()))。该字段不需要在视图范围内进行验证。例子:

public static Result newTask() {
    Form<Task> form = taskForm.bindFromRequest();
    if (form.hasErrors()) {
        return badRequest("Error");
    } else {
        Task task = form.get();
        task.setCreationDate(new Date());
        taskDAO.save(task);
        return redirect(routes.Application.tasks());
    }
}

在上面的代码中,表单没有经过验证(返回 hasErrors())。

4

2 回答 2

0

将字段注释为@NotNull很方便,因为它将约束传播到 DB 级别。

我宁愿坚持以下两种方法之一:

  1. public String validate()方法添加到您的Task类。如果没有错误,它应该返回null,如果有错误,它应该返回错误字符串。

  2. 实现您的自定义验证器。示例在这里:如何在 Play Framework 2.0 中创建自定义验证器?

于 2013-08-09T19:16:17.660 回答
0

如果您没有表单输入,我认为您不应该根据需要对该字段进行注释。相反,您将在 bindFromRequest 之后和保存实体之前设置此字段。

但如果你真的想这样做,也许这样的事情可以工作:

Form<MyEntity> myEntityForm = Form.form(MyEntity.class).bindFromRequest();
myEntityForm.data().put("creation_date", ...);
于 2013-08-06T06:56:26.760 回答