所以我正在玩Play的编辑个人资料功能!框架(2.2.0);
我有这段代码
public static Result doEditProfile(){
final User localUser = getLocalUser(session());
Form<User> formData = editProfileForm.bindFromRequest();
if (formData.hasErrors()) {
return badRequest(views.html.editprofile.render(localUser, editProfileForm));
} else {
localUser.firstName = formData.field("firstName").value();
localUser.lastName = formData.field("lastName").value();
localUser.locale = formData.field("locale").value();
localUser.gender = formData.field("gender").value();
localUser.country = formData.field("country").value();
localUser.save();
}
return redirect("/profile/edit");
}
有效。但我想知道有更好的方法吗?
我试过这件事:
1)
public static Result doEditProfile(){
final User localUser = getLocalUser(session());
Form<User> formData = editProfileForm.bindFromRequest();
if (formData.hasErrors()) {
return badRequest(views.html.editprofile.render(localUser, editProfileForm));
} else {
User localUser = formData.get();
localUser.save();
}
return redirect("/profile/edit");
}
但是这表示已经定义了变量localUser。
2)另外,我试过这个
public static Result doEditProfile(){
final User localUser = getLocalUser(session());
Form<User> formData = editProfileForm.bindFromRequest();
if (formData.hasErrors()) {
return badRequest(views.html.editprofile.render(localUser, editProfileForm));
} else {
User updatedUser = formData.get();
updatedUser.save();
}
return redirect("/profile/edit");
}
但是此代码正在数据库中创建一个新用户。
我是Play的新手,所以我在等待任何建议。谢谢,抱歉我的英文
答案 0 :(得分:0)
您的用户是否拥有唯一ID?如果是这样,您可以尝试以下方法:
updatedUser.setId(localUser.getId())
updatedUser.save()
答案 1 :(得分:0)
在这里看到这个例子:
How to update an existing object in playframework 2.0.2? aka CRUD in 1.2.x
......就像@mantithetical所说的那样。最好在User类中使用更新方法:
public static Result update(Long id) {
Form<User> userForm = form(User.class).bindFromRequest();
if(userForm.hasErrors()) {
return badRequest(editForm.render(id, userForm));
}
userForm.get().update(id);
...
只需提供唯一ID(请注意,我们在处理错误请求时依赖于id,而不是整个用户)。您可以通过在路径文件中向控制器添加参数来实现此目的:
POST /update/:id controllers.doEditProfile(id: Long)
然后,当您指向您的控制器方法时,您必须传递该唯一ID。