Play 2 Java - 在更新方案

时间:2017-02-19 05:12:51

标签: java validation playframework-2.0 crud

我很难搞清楚如何在Play 2 Java中进行更新方案

我有 User.java模型

public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    public Long id;

    @Constraints.Required
    public String email;

    @Constraints.Required
    public String fullname;
}

我想更新它,所以在我的控制器中我做

public Result update(Long id) {
    ObjectNode result = Json.newObject();

    User employee = userService.get(id);

    Form<User> userForm = formFactory.form(User.class).fill(employee);

    // This won't trigger validation because it uses fill() not bind()
    if (userForm.hasError()) {
         result.set("message", userForm.errorsAsJson());

         return badRequest(result);
    }

    // do update here
}

然后我尝试一些不同的方法,比如这个

public Result update(Long id) {
    ObjectNode result = Json.newObject();

    User employee = userService.get(id);

    Form<User> userForm = formFactory.form(User.class).fill(employee);
    userForm = userForm.bindFromRequest();

    // This will trigger validation but bindFromRequest will override my fill(employee) before.
    if (userForm.hasError()) {
         result.set("message", userForm.errorsAsJson());

         return badRequest(result);
    }

    // do update here
}

上面的bindFromRequest()会覆盖我的fill(employee)。我不想这样做,因为在我的请求中我只想填充fullname而不是我的email,我的email属性将触发其必需的验证。

所以我的问题是,我怎样才能使用现有值填充表单i填充我的fullname属性,并仍然从我的模型中触发验证约束?

1 个答案:

答案 0 :(得分:0)

userForm = userForm.bindFromRequest();更改为userForm.bindFromRequest();

我的工作代码与你的代码非常相似,这是我观察到的唯一区别。