我很难搞清楚如何在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
属性,并仍然从我的模型中触发验证约束?
答案 0 :(得分:0)
将userForm = userForm.bindFromRequest();
更改为userForm.bindFromRequest();
我的工作代码与你的代码非常相似,这是我观察到的唯一区别。