gpt4 book ai didi

java - Play 2 Java - 在更新场景中使用 fill 和 bindFromRequest 验证表单

转载 作者:太空宇宙 更新时间:2023-11-04 11:46:09 24 4
gpt4 key购买 nike

我很难弄清楚如何在 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;
}

我想更新它,所以在我的 Controller 中我这样做

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 属性将触发其所需的验证。

所以我的问题是,如何仅使用我使用现有值填写的表单更新我的 fullname 属性,并且仍然触发模型的验证约束?

最佳答案

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

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

关于java - Play 2 Java - 在更新场景中使用 fill 和 bindFromRequest 验证表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42323888/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com