2017-02-19 13 views
1

我在搞清楚如何做更新方案中扮演困难的时候更新方案2的Java玩2爪哇 - 使用填充和bindFromRequest在


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 
} 

然后我尝试这样

012的一些不同的方法
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属性与填充形式使用现有的值,仍然触发我的模型验证约束?

+0

嗨,你能解决它吗? – jschnasse

回答

0

变化userForm = userForm.bindFromRequest();userForm.bindFromRequest();

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