Play2 Framework更好的解决方案

时间:2013-10-23 12:02:20

标签: java playframework-2.2

所以我正在玩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的新手,所以我在等待任何建议。谢谢,抱歉我的英文

2 个答案:

答案 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。