0

所以我正在使用 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 新手,所以我正在等待任何建议。谢谢和对不起我的英语

4

2 回答 2

0

在这里看到了这个例子:

如何更新 playframework 2.0.2 中的现有对象?又名 1.2.x 中的 CRUD

...按照@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。

于 2013-10-25T23:43:43.577 回答
0

您的用户有唯一的 id 吗?如果是这样,您可以尝试以下方法:

updatedUser.setId(localUser.getId())
updatedUser.save()
于 2013-10-25T22:32:09.453 回答